Junior — Middle
73
Kaip atskirti prieigos lygius private, protected ir public objektinio programavimo kalboje ir kuo jie skiriasi vienas nuo kito?
Įmonės kur klausė
ИП Калюков Н.С.
Atsakymas iš AI
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()) # Доступ через метод класса