Sobes.tech
Junior — Middle

Como distinguir os níveis de acesso private, protected e public na programação orientada a objetos, e em que eles diferem entre si?

sobes.tech IA

Resposta da IA

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

  • 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())     # Доступ через метод класса