Часть 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
, используя эти методы. Давайте посмотрим:
- Мы инициировали новый объект с
first_name
TK иemail
[email protected] - Распечатал электронное письмо, открыв
non-public variable
с помощью метода - Пытался выставить новый
email
вне нашего класса - Нам нужно рассматривать
non-public variable
какnon-public
часть API. - Обновлен
non-public variable
с помощью нашего метода экземпляра - Успех! Мы можем обновить его внутри нашего класса с помощью вспомогательного метода
Публичный метод
С 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