Explicați diferențele în utilizarea unui și dublu underscore în numele variabilelor și metodelor în Python.
sobes.tech AI
Răspuns de la AI
În Python, o linie de subliniere simplă la începutul numelui unei variabile sau metode (de exemplu, _var) reprezintă o convenție care indică faptul că acest nume este destinat pentru uz intern (protecționat) și nu trebuie utilizat în afara clasei sau modulului. Este doar o recomandare, interpretatorul nu interzice accesul.
Dublu subliniere la începutul numelui (de exemplu, __var) activează mecanismul name mangling — numele variabilei sau metodei este modificat de interpretator pentru a îngreuna accesul din afara clasei. Acest lucru este folosit pentru a crea atribute private, dificil de suprascris sau utilizat accidental în subclase.
Exemplu:
class MyClass:
def __init__(self):
self._protected = 1 # convenție: atribut protejat
self.__private = 2 # name mangling
obj = MyClass()
print(obj._protected) # acces posibil, dar nerecomandat
# print(obj.__private) # va genera o eroare AttributeError
print(obj._MyClass__private) # acces la atributul "privat" prin name mangling
Prin urmare, un underscore simplu este o convenție, iar dublu este un mecanism de ascundere a numelui.