Инкапсуляция в Python Сокрытие атрибутов класса

Это позволяет полностью скрыть внутренние данные и методы и обеспечить их защиту от некорректного использования. Защищенные атрибуты и методы обозначаются одним подчеркиванием _. Они предназначены для использования внутри класса и его подклассов. Это позволяет ограничить доступ к внутренним данным и методам и предотвратить их некорректное использование. Инкапсуляция является важным аспектом объектно-ориентированного программирования, который помогает улучшить структуру и читаемость кода. В Python инкапсуляция достигается с помощью соглашений по именованию и использования ооп python геттеров и сеттеров.

  • Метод “start_engine” вызывает приватный метод “__engine_on”, который нельзя вызвать напрямую извне класса “Car”.
  • Но поскольку это соглашение, принятое программистами, оно сообщает другим программистам, что переменные или методы должны использоваться только в рамках класса.
  • Поля класса объявляются как приватные (например, с помощьюдвойного подчеркивания в Python), что делает их недоступными для прямогообращения извне класса.
  • В результате атрибут как он есть (в данном случае __count) оказывается замаскированным.
  • В этой статье мы рассмотрим основные принципы инкапсуляции, примеры ее использования и практические задачи, которые помогут вам лучше понять эту концепцию.
  • В Python инкапсуляция достигается с помощью использования атрибутов и методов, которые являются приватными или защищенными.

ООП на Python: концепции, принципы и примеры реализации

Для получения и изменения значения приватных полей объектаиспользуются специальные методы — геттеры (getters) для получения значения исеттеры (setters) для установки значения. Это позволяет контролировать доступ кданным и выполнять необходимые проверки или дополнительные действия при ихизменении. Инкапсуляция — ограничение доступа к составляющим объект компонентам (методам и переменным). Инкапсуляция делает некоторые из компонент доступными только внутри класса. Аналогично, мы можем создать подкласс Truck (грузовик), который наследует все атрибуты и методы класса Vehicle, и к тому же имеет свои атрибуты – длину кузова и тяговую мощность.

Инкапсуляция, атрибуты и свойства в Python

Если параметр key не соответствует допустимым полям, то искусственно возбуждается исключение AttributeError. Мы это видим, когда в основной ветке пытаемся обзавестись полем b. В Python подобной инкапсуляции нет, хотя существует способ ее имитировать. Перед тем как выяснять, как это делается, надо понять, зачем вообще что-то скрывать.

Искажение имени двойным подчеркиванием

Объекты становятся более модульными, так какскрытие внутренней реализации позволяет изменять её без влияния на код,использующий объект. Инкапсуляция способствует созданию компонентов, которые можноповторно использовать в различных частях программы или в других проектах безизменения их внутренней реализации. В этом примере методы get_title(), get_author() и get_isbn() являются получающимиметодами (геттерами), которые позволяют нам получать значения приватных атрибутовизвне класса.

инкапсуляция python

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

Рекомендуется использовать инкапсуляцию во всех проектах, независимо от их размера и сложности. Это поможет вам создавать более структурированный, читаемый и поддерживаемый код, который будет легче развивать и поддерживать в долгосрочной перспективе. Создайте класс Rectangle, который инкапсулирует ширину и высоту прямоугольника и предоставляет методы для расчета площади и периметра. Это позволит вам контролировать доступ к атрибутам и обеспечивать корректные значения. Рассмотрим пример класса BankAccount, который инкапсулирует баланс счета и предоставляет методы для его изменения.

Продолжая пользование данным сайтом, вы соглашаетесь с использованием файлов cookie. Класс Mydict ведёт себя точно так же, как и словарь, за исключением того, что метод get по умолчанию возвращает не None, а 0. В этой статье мы рассмотрим на конкретных примерах первыедве концепции, а в следующей – остальные. Для создания свойства-сеттера над свойством устанавливается аннотация имя_свойства_геттера.setter.

Например, используют отладочные техники или выводы из тестов unittest и pytest. Multiprocessing, наоборот, создает отдельные процессы, использующие собственную память. Модуль подходит для задач, требующих использования всех ядер процессора и где важна безопасность изоляции процессов. При обсуждении типов данных интервьюеры спрашивают о преобразовании одного типа в другой.

Эти базовые концепции, в свою очередь, лежат в основефундаментальных принципов ООП. Причем опосредование доступа к атрибутам через методы позволяет задать дополнительную логику. Так, в зависимости от переданного возраста мы можем решить, надо ли переустанавливать возраст, так как переданное значение может быть некорректным. Специальный случай для метода __init__ — инициализация нового объекта класса.

Этопример того, как инкапсуляция может обеспечить безопасность данных и контрольдоступа, несмотря на увеличение сложности кода. Абстракция – процесс определения существенных характеристикобъекта и игнорирования несущественных характеристик. Это позволяет создаватьабстрактные классы, которые определяют общие свойства и поведение группыобъектов, не уточняя детали каждого объекта. В ООП полиморфизм позволяет рассматривать объекты разных классов так,как если бы они были объектами одного класса. Классы, объекты, атрибуты и методы – самые простые, самыебазовые понятия ООП.

инкапсуляция python

Мы сделали игровое поле и поместили на него объекты шариков, которые что-то умели. Мы возьмём код из прошлой статьи и на её основе разберём три новых термина в ООП — инкапсуляцию, наследование и полиморфизм. В разных языках программирования реализация этого выглядит по-разному, но в основе база всегда одна.

Инкапсуляция – механизм сокрытия деталей реализации классаот других объектов. Достигается путем использования модификаторов доступа public,private и protected, которые соответствуют публичным, приватным и защищенныматрибутам. В этом примере используется встроенная функция super(), которая позволяет вызывать методы родительского суперкласса из подкласса. Этот прием позволяет переиспользовать методы и расширять их функциональность. В данном случае вызывается метод инициализации super().__init__, который позволяет применить атрибуты суперкласса к подклассу. При необходимости, помимо унаследованных, можно определить новые свойства, которые относятся только к конкретному подклассу.

При этом получим разный результат, так как числа и строки являются разными классами. Наследование – процесс создания нового класса на основесуществующего класса. Новый класс, называемый подклассом или производнымклассом, наследует свойства и методы существующего класса, называемогосуперклассом или базовым классом. Но Python имеет также еще один – более элегантный способ – свойства. Этот способ предполагает использование аннотаций, которые предваряются символом @. Геттеры и сеттеры позволяют контролировать доступ к данным, применяя дополнительную логику при их изменении.

В данном случае метод qty_object() не принимает объект (нет self), поэтому вызывать его надо через класс. Хотя правильнее такие методы делать статическими (рассматривается в одном из следующих уроков). Баланс счета не должен быть напрямую доступен или изменяем извне класса, чтобы предотвратить неавторизованные транзакции. Полиморфизм — это когда мы можем вызывать одни и те же методы у разных классов. Внутри они могут работать по-разному, но внешне всё будет выглядеть одинаково.