Junior — Middle
56
Как отличить уровни доступа 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()) # Доступ через метод класса