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".