Middle+
Kaip įgyvendinama inkapsuliacija Python? Papasakok apie prieigos modifikatorius.
sobes.tech AI
Atsakymas iš AI
Python'e inkapsulacija realizuojama per konvencijas dėl pavadinimų ir klasių savybių, nes kitose kalbose (private, protected, public) nėra griežtų prieigos modifikatorių.
- Vieši atributai ir metodai — vardai be pabraukimų, prieinami bet kur.
- Apsaugoti (protected) — vardai su vienu pabraukimu
_var. Tai konvencija, kuri nurodo, kad atributas ar metodas skirtas tik vidiniam naudojimui, bet techniškai prieinamas iš išorės. - Privatūs (private) — vardai su dviem pabraukimais
__var. Python taiko vardų mangling'ą, keisdamas atributo vardą klasės viduje, kad apsunkintų prieigą iš išorės.
Pavyzdys:
class MyClass:
def __init__(self):
self.public = "prieinama visiems"
self._protected = "rekomenduojama nenaudoti už klasės ir paveldėtojų ribų"
self.__private = "paslėpta nuo tiesioginės prieigos"
obj = MyClass()
print(obj.public) # veikia
print(obj._protected) # veikia, bet nerekomenduojama
# print(obj.__private) # sukels klaidą
print(obj._MyClass__private) # prieiga per vardų mangling'ą
Taigi, inkapsuliacija Python'e yra labiau susitarimas ir mangling mechanizmas, o ne griežti prieigos modifikatoriai.