Sobes.tech
Back to questions
Junior — Middle
75

Какие отличия существуют между модификаторами доступа public, protected и private в языках программирования?

Answer from AI

sobes.tech AI

В Python нет строгих модификаторов доступа, как в некоторых других языках (например, Java или C++), но есть соглашения:

  • public — атрибуты и методы, доступные везде. Просто обычные имена.
  • protected — обозначается одним подчеркиванием _name. Это соглашение, что атрибут или метод предназначен для внутреннего использования в классе и его наследниках, но технически доступен извне.
  • private — обозначается двумя подчеркиваниями __name. Это вызывает манглинг имени (name mangling), что усложняет доступ к атрибуту извне класса, но не делает его полностью недоступным.

Пример:

class MyClass:
    def __init__(self):
        self.public = 1
        self._protected = 2
        self.__private = 3

obj = MyClass()
print(obj.public)       # 1
print(obj._protected)   # 2 (но по соглашению не стоит так делать)
# print(obj.__private)  # Ошибка
print(obj._MyClass__private)  # 3, доступ через name mangling