Часть IV: инкапсуляция, наследование

Это четвертая часть серии Beautiful Python от Tk. Если вы начинающий разработчик и изучаете Python, вам следует начать с части I и части II этой серии . В первой части мы узнаем об истории Python и очень простых вещах, таких как переменные, поток управления (операторы if-else) и цикл. Во второй части мы подробнее поговорим о структурах данных Python, о том, как они работают и как мы можем их перебирать.

Я также советую вам прочитать первую часть объектно-ориентированного программирования с помощью Python

Давайте начнем! :)

Инкапсуляция: сокрытие информации

Инкапсуляция - это механизм, ограничивающий прямой доступ к данным и методам объектов. Но в то же время это облегчает работу с этими данными (методами объектов).

Инкапсуляция может использоваться, чтобы скрыть элементы данных и функции членов. Согласно этому определению, инкапсуляция означает, что внутреннее представление «объекта обычно скрыто от просмотра за пределами определения объекта ». - Википедия

Все внутреннее представление объекта скрыто снаружи. Только объект может взаимодействовать со своими внутренними данными.

Во-первых, нам нужно понять, как работают переменные и методы экземпляра public и non-public.

Переменные общедоступного экземпляра

Для класса Python мы можем инициализировать public instance variable в нашем методе конструктора. Посмотрим на это:

В методе конструктора:

Здесь мы применяем значение first_name в качестве аргумента для public instance variable.

Внутри класса:

Здесь нам не нужно применять first_name в качестве аргумента, и все объекты экземпляра будут иметь class attribute, инициализированный с помощью TK.

Прохладный. Теперь мы узнали, что можем использовать public instance variables и class attributes. Еще одна интересная особенность public - то, что мы можем управлять значением переменной. Что я имею в виду? Наш object может управлять своим значением переменной: Get и Set значениями переменных.

Помня о классе Person, мы хотим установить другое значение для его переменной first_name:

Итак, мы идем. Мы просто устанавливаем другое значение (kaio) переменной экземпляра first_name, и оно обновляет значение. Просто как тот. Поскольку это public переменная, мы можем это сделать.

Непубличная переменная экземпляра

Мы не используем здесь термин частный, поскольку ни один атрибут в Python не является действительно частным (без, как правило, ненужного объема работы). - PEP 8

Как public instance variable, мы можем определить non-public instance variable как внутри метода конструктора, так и внутри класса. Разница в синтаксисе: для non-public instance variables используйте символ подчеркивания (_) перед именем variable.

Частные переменные экземпляра, к которым нельзя получить доступ, кроме как изнутри объекта, в Python не существует. Однако существует соглашение, которому следует большая часть кода Python: имя с префиксом подчеркивания (например, _spam) должно рассматриваться как закрытая часть API (будь то функция, метод или член данных) »- Python Software Foundation

Вот пример:

Вы видели переменную email? Вот как мы определяем non-public variable:

Мы можем получить к нему доступ и обновить. Non-public variables являются лишь условием и должны рассматриваться как закрытая часть API.

Итак, мы используем метод, который позволяет нам делать это внутри определения нашего класса. Давайте реализуем два метода (email и update_email), чтобы понять это:

Теперь мы можем обновлять и получать доступ non-public variables, используя эти методы. Давайте посмотрим:

  1. Мы инициировали новый объект с first_name TK и email [email protected]
  2. Распечатал электронное письмо, открыв non-public variable с помощью метода
  3. Пытался выставить новый email вне нашего класса
  4. Нам нужно рассматривать non-public variable как non-public часть API.
  5. Обновлен non-public variable с помощью нашего метода экземпляра
  6. Успех! Мы можем обновить его внутри нашего класса с помощью вспомогательного метода

Публичный метод

С public methods мы также можем использовать их вне нашего класса:

Давайте проверим это:

Отлично - мы можем использовать его без проблем.

Непубличный метод

Но с non-public methods мы не можем этого сделать. Давайте реализуем тот же класс Person, но теперь с show_age non-public method с подчеркиванием (_).

А теперь попробуем вызвать это non-public method с помощью нашего объекта:

Мы можем получить к нему доступ и обновить. Non-public methods - это просто соглашение, и их следует рассматривать как непубличную часть API.

Вот пример того, как мы можем это использовать:

Здесь у нас есть _get_age non-public method и show_age public method. show_age может использоваться нашим объектом (вне нашего класса), а _get_age только внутри нашего определения класса (внутри show_age метода). Но опять же: условно.

Сводка инкапсуляции

С помощью инкапсуляции мы можем гарантировать, что внутреннее представление объекта скрыто снаружи.

Наследование: поведение и характеристики

У некоторых объектов есть общие черты: их поведение и характеристики.

Например, я унаследовал некоторые характеристики и поведение от своего отца. Я унаследовал его глаза и волосы как характеристики, а его нетерпение и интроверсию как поведение.

В объектно-ориентированном программировании классы могут наследовать общие характеристики (данные) и поведение (методы) от другого класса.

Давайте посмотрим на другой пример и реализуем его на Python.

Представьте себе машину. Количество колес, пассажировместимость и максимальная скорость - все это атрибуты автомобиля. Можно сказать, что класс ElectricCar наследует те же атрибуты от обычного класса Car.

Реализован наш класс Автомобиль:

После инициации мы можем использовать все созданные instance variables. Отлично.

В Python мы применяем parent class к child class в качестве параметра. Класс ElectricCar может быть унаследован от нашего класса Car.

Просто как тот. Нам не нужно реализовывать какой-либо другой метод, потому что он уже есть в этом классе (унаследованный от класса Car). Докажем это:

Красивый. ❤

Вот и все!

Мы узнали много нового об объектно-ориентированном программировании Python:

  • Инкапсуляция: скрытие информации
  • Наследование: поведение и характеристики

Я надеюсь, что вы, ребята, сможете оценить содержание и узнать больше о том, как работает объектно-ориентированное программирование Python. Это четвертая часть серии Красивый Python.

Если вы не видели часть I, часть II и часть III, получите ролевую серию!

Если вы хотите пройти полный курс Python, узнать больше о реальных навыках программирования и создавать проекты, попробуйте One Month Python Bootcamp. Увидимся там! ☺

Получайте удовольствие, продолжайте учиться и всегда пишите код!

Надеюсь, вам понравился этот контент. Поддержите мою работу над Ko-Fi

Мой Instagram, Twitter, Github и LinkedIn. ☺