Модификаторы доступа в 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?