Sobes.tech
Middle+

Ako sa realizuje enkapsulácia v Pythone? Porozprávaj mi o modifikátoroch prístupu.

sobes.tech AI

Odpoveď od AI

V Pythone je enkapsulácia realizovaná prostredníctvom konvencií pomenovania a vlastností tried, pretože neexistujú prísne modifikátory prístupu ako v iných jazykoch (private, protected, public).

  • Verejné atribúty a metódy — názvy bez podčiarkovníkov, dostupné všade.
  • Chránené (protected) — názvy s jedným podčiarkovníkom _var. Ide o konvenciu, ktorá naznačuje, že atribút alebo metóda je určená na interné použitie, ale technicky je dostupná zvonku.
  • Súkromné (private) — názvy s dvomi podčiarkovníkmi __var. Python aplikuje mangling názvov, mení názov atribútu vnútri triedy, aby sťažilo prístup zvonku.

Príklad:

class MyClass:
    def __init__(self):
        self.public = "prístupné všetkým"
        self._protected = "odporúča sa nepoužívať mimo triedy a dediace"
        self.__private = "skryté pred priamym prístupom"

obj = MyClass()
print(obj.public)        # funguje
print(obj._protected)    # funguje, ale neodporúča sa
# print(obj.__private)   # spôsobí chybu
print(obj._MyClass__private)  # prístup cez mangling názvov

Teda, enkapsulácia v Pythone je skôr dohoda a mechanizmus manglingu, než prísne modifikátory prístupu.