Sobes.tech
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.