Sobes.tech
Junior — Middle
57

Как отличить уровни доступа private, protected и public в объектно-ориентированном программировании, и чем они отличаются друг от друга?

Компании, где спрашивали
ИП Калюков Н.С.

Ответ от нейросети

sobes.tech AI

В объектно-ориентированном программировании уровни доступа определяют, какие части кода могут обращаться к определённым членам класса (переменным и методам):

  • private — доступ разрешён только внутри самого класса. Члены с таким уровнем доступа недоступны извне и в подклассах.
  • protected — доступ разрешён внутри класса и его подклассов (наследниках). В Python это реализуется соглашением с одним подчёркиванием _, хотя строгой защиты нет.
  • public — доступ разрешён отовсюду, нет ограничений.

В Python нет строгой инкапсуляции, но есть соглашения:

  • Имя без подчёркиваний — public.
  • Имя с одним подчёркиванием (_var) — protected (рекомендуется не использовать вне класса и наследников).
  • Имя с двумя подчёркиваниями (__var) — private, с механизмом name mangling, чтобы усложнить доступ извне.

Пример:

class Example:
    def __init__(self):
        self.public_var = 1
        self._protected_var = 2
        self.__private_var = 3

    def get_private(self):
        return self.__private_var

obj = Example()
print(obj.public_var)        # Доступно
print(obj._protected_var)    # Доступно, но не рекомендуется
# print(obj.__private_var)   # Ошибка
print(obj.get_private())     # Доступ через метод класса