Sobes.tech
Middle+

Hogyan valósul meg az inkapszuláció Pythonban? Mesélj a hozzáférés módosítókról.

sobes.tech MI

Válasz az MI-től

Pythonban az enkapszulációt névkonvenciók és osztálytulajdonságok segítségével valósítják meg, mivel más nyelvekhez képest (private, protected, public) nincsenek szigorú hozzáférés módosítók.

  • Nyilvános attribútumok és metódusok — aláhúzás nélküliek, mindenhol elérhetők.
  • Védett (protected)_var kezdő nevűk. Ez egy konvenció, ami azt jelzi, hogy az attribútum vagy metódus belső használatra szánt, de technikailag kívülről is elérhető.
  • Privát (private)__var kezdő nevűek. A Python alkalmaz egy név mangling-et, módosítva az attribútum nevét a osztályon belül, hogy megnehezítse a külső hozzáférést.

Példa:

class MyClass:
    def __init__(self):
        self.public = "mindenki számára elérhető"
        self._protected = "nem ajánlott osztályon kívül és örökösök által használni"
        self.__private = "közvetlen hozzáféréstől elrejtve"

obj = MyClass()
print(obj.public)        # működik
print(obj._protected)    # működik, de nem ajánlott
# print(obj.__private)   # hibát okoz
print(obj._MyClass__private)  # név mangling segítségével elérhető

Tehát, az inkapszuláció Pythonban inkább egy megállapodás és egy mangling mechanizmus, nem szigorú hozzáférés módosítók.