Модификаторы доступа в python
В Python нет строгих модификаторов доступа, как в Java или C++, но есть соглашения и механизмы, которые помогают обозначать уровень доступа к атрибутам и методам класса.
1. Публичные (public) атрибуты и методы
По умолчанию все атрибуты и методы в Python — публичные.
К ним можно обращаться и читать/писать как внутри класса, так и снаружи.
class MyClass:
def __init__(self):
self.value = 10 # публичный атрибут
obj = MyClass()
print(obj.value) # 10
obj.value = 20
2. Защищённые (protected) — _single underscore
Атрибуты и методы с одним подчёркиванием
_name
считаются защищёнными.Это соглашение: разработчик показывает, что этот элемент предназначен для внутреннего использования (в классе и наследниках), но технически к нему можно получить доступ извне.
class MyClass:
def __init__(self):
self._protected = 42
obj = MyClass()
print(obj._protected) # Можно, но не рекомендуется обращаться напрямую
3. Приватные (private) — __double underscore
Атрибуты и методы с двумя подчёркиваниями
__name
вызывают name mangling — имя атрибута внутри класса меняется, чтобы затруднить доступ извне.Это помогает предотвратить случайное переопределение или доступ из вне, но не даёт 100% защиты.
class MyClass:
def __init__(self):
self.__private = 99
obj = MyClass()
# print(obj.__private) # Ошибка: AttributeError
# Но можно обратиться так:
print(obj._MyClass__private) # 99
Итог
public
name
Публичный
Общедоступный, нет ограничений
protected
_name
Защищённый
Соглашение: использовать внутри класса и наследников
private
__name
Приватный (с name mangling)
Скрыт от прямого доступа, но не полностью
Last updated
Was this helpful?