_my_attribute
). Указывают, что атрибут предназначен только для внутреннего использования внутри класса и его подклассов. Напрямую обращаться к ним извне не рекомендуется, но технически возможно.__my_attribute
). Python выполняет name mangling, заменяя имя атрибута на _ClassName__my_attribute
. Это затрудняет (но не исключает) прямой доступ к атрибуту извне класса, сигнализируя о его "приватности". Основная цель - избежать конфликтов имен атрибутов в подклассах.В Python нет строгой концепции "защищенных" и "приватных" атрибутов, как в некоторых других языках программирования, таких как Java или C++. Вместо этого используются соглашения об именовании, чтобы указать, что атрибут предназначен для внутреннего использования и не должен напрямую модифицироваться извне класса.
Защищенные атрибуты:
_
)._my_protected_attribute
Приватные атрибуты:
__
)._ClassName
к имени атрибута.__my_private_attribute
instance._ClassName__my_private_attribute
, где instance
- экземпляр класса, а ClassName
- имя класса.Важно понимать:
Пример:
class MyClass:
def __init__(self):
self._protected_attribute = "Я защищенный"
self.__private_attribute = "Я приватный"
def get_private(self):
return self.__private_attribute # доступ изнутри класса
obj = MyClass()
print(obj._protected_attribute) # Работает, но не рекомендуется
print(obj.get_private()) # Рекомендуемый способ доступа к "приватному" атрибуту
# print(obj.__private_attribute) # Вызовет AttributeError
print(obj._MyClass__private_attribute) # Работает, но крайне не рекомендуется
В заключение, Python полагается на соглашения об именовании, а не на жесткие правила приватности, чтобы указать, какие атрибуты класса предназначены для внутреннего использования. Разработчики должны уважать эти соглашения для поддержания чистого и поддерживаемого кода.