Junior — Middle
Selgitage ühe ja kahekordse alakriipsu kasutamise erinevusi Pythonis muutuja- ja meetodinimedes.
sobes.tech AI
Vastus AI-lt
Pythonis on ühekordne alakriips nime alguses (näiteks _var) konventsioon, mis näitab, et see nimi on mõeldud sisekasutuseks (kaitstud) ning seda ei tohiks kasutada väljaspool klassi või moodulit. See on ainult soovitus, tõlgendaja ei keela juurdepääsu.
Kahe alakriipsu alguses (näiteks __var) aktiveerib name mangling mehhanismi — muutuja või meetodi nimi muudetakse tõlgendaja poolt, et raskendada juurdepääsu klassist väljaspool. Seda kasutatakse privaatsete atribuutide loomiseks, mis on keerulised üle kirjutada või juhuslikult kasutada alamklassides.
Näide:
class MyClass:
def __init__(self):
self._protected = 1 # konventsioon: kaitstud atribuut
self.__private = 2 # name mangling
obj = MyClass()
print(obj._protected) # juurdepääs võimalik, kuid ei soovitata
# print(obj.__private) # põhjustab AttributeErrori
print(obj._MyClass__private) # juurdepääs "privaatsele" atribuudile name manglingi kaudu
Seega, ühekordne alakriips on konventsioon, kahekordne mehhanism nime varjamiseks.