Middle+
Как се реализира инкапсулацията в Python? Разкажи ми за модификаторите за достъп.
sobes.tech AI
Отговор от AI
В Python инкапсуацията се реализира чрез конвенции за именуване и свойства на класовете, тъй като няма строги модификатори за достъп като в други езици (private, protected, public).
- Публични атрибути и методи — имена без подчертавания, достъпни навсякъде.
- Защитени (protected) — имена с едно подчертаване
_var. Това е конвенция, която показва, че атрибут или метод е предназначен за вътрешна употреба, но технически е достъпен отвън. - Частни (private) — имена с две подчертавания
__var. Python прилага механизъм за mangling на имената, променяйки името на атрибута вътре в класа, за да затрудни достъпа отвън.
Пример:
class MyClass:
def __init__(self):
self.public = "достъпно за всички"
self._protected = "препоръчително е да не се използва извън класа и наследниците"
self.__private = "скрито от директен достъп"
obj = MyClass()
print(obj.public) # работи
print(obj._protected) # работи, но не се препоръчва
# print(obj.__private) # ще доведе до грешка
print(obj._MyClass__private) # достъп чрез mangling на имена
Така, инкапсуацията в Python е по-скоро споразумение и механизъм за mangling, а не строги модификатори за достъп.