Sobes.tech
Back to questions
Junior — Middle
65

Чем отличаются методы с модификаторами доступа private и protected в контексте объектно-ориентированного программирования?

Answer from AI

sobes.tech AI

В Python модификаторы доступа реализованы неявно и основаны на соглашениях:

  • private (на самом деле, имитация приватности) достигается с помощью двойного подчёркивания в начале имени метода или атрибута, например __method(). Это приводит к name mangling — изменению имени, чтобы затруднить доступ извне.

  • protected обозначается одним подчёркиванием _method(). Это просто соглашение, что метод или атрибут предназначен для внутреннего использования в классе и его наследниках, но технически доступен из любого места.

Итого:

  • private (двойное подчёркивание) — ограничивает доступ, усложняя обращение извне.
  • protected (одинарное подчёркивание) — предупреждение для разработчиков, что элемент не предназначен для публичного использования.

Пример:

class Base:
    def __private_method(self):
        print("Приватный метод")

    def _protected_method(self):
        print("Защищённый метод")

b = Base()
b._protected_method()  # Работает, но не рекомендуется
b.__private_method()   # Ошибка, имя изменено