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

Инкапсуляция в Python - это механизм, позволяющий скрыть или ограничить доступ к атрибутам и методам класса. Открытые (public), защищенные (protected) и закрытые (private) атрибуты и методы класса могут быть определены с помощью различных видов атрибутов и методов.

Открытые (public) атрибуты и методы являются доступными из любого места программы и могут быть обращены к ним напрямую. Например, рассмотрим класс "Person" с открытым атрибутом "name":

python
class Person:
    def __init__(self, name):
        self.name = name
person = Person("John")
print(person.name)  # Выводит "John"

Защищенные (protected) атрибуты и методы начинаются с символа подчеркивания перед их именем. Они могут быть доступны только внутри класса и его подклассов. В классе "Person" определим защищенный метод "display_name":

python
class Person:
    def __init__(self, name):
        self._name = name
    def _display_name(self):
        print(self._name)
person = Person("John")
person._display_name()  # Выводит "John"

Закрытые (private) атрибуты и методы начинаются с двух символов подчеркивания перед их именем. Они могут быть доступны только внутри класса, но не доступны для его подклассов или для внешних объектов. В классе "Person" определим закрытый атрибут "age":

python
class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age
    def get_age(self):
        return self.__age
person = Person("John", 30)
print(person.get_age())  # Выводит 30
print(person.__age)  # Ошибка: 'Person' object has no attribute '__age'

При попытке обратиться к закрытому атрибуту "__age" вне класса возникает ошибка.

Этот механизм инкапсуляции позволяет скрыть внутренние детали реализации класса и обеспечить безопасность данных. Однако, в Python инкапсуляция основана на соглашениях между программистами, а не на строгой приватности. Например, закрытые атрибуты все еще могут быть доступными с использованием имени вида "_ClassName__attribute".

Похожие вопросы на: "python инкапсуляция "

LRU Cache: Understanding & Implementing the Algorithm for Better Website Performance
Работа с unset php - основы удаления переменных в PHP
Установка Python на Ubuntu - подробная инструкция
Readonly: принцип работы и основные применения
Изучаем CNAM: Что это такое и зачем нужно знать
Java Date Format: How to Format Dates in Java
Симуляции и рекомендации для класса варлок в World of Warcraft на Bloodmallet
<h1>Transform origin CSS: изменение точки преобразования элемента
SSL Error Rx Record Too Long - Troubleshooting Guide and Solutions
Невозможно подключиться к серверу MySQL