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) —
_varkezdő 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) —
__varkezdő 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.