Sobes.tech
Junior — Middle

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.