Sobes.tech
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, а не строги модификатори за достъп.