Sobes.tech
Junior — Middle

Spiega le differenze nell'uso di un e due underscore nei nomi di variabili e metodi in Python.

sobes.tech AI

Risposta dell'AI

In Python, un underscore all'inizio del nome di una variabile o metodo (ad esempio, _var) è una convenzione che indica che questo nome è destinato all'uso interno (protetto) e non dovrebbe essere usato al di fuori della classe o del modulo. È solo una raccomandazione, l'interprete non vieta l'accesso.

Il doppio underscore all'inizio del nome (ad esempio, __var) attiva il meccanismo name mangling — il nome della variabile o metodo viene modificato dall'interprete per rendere più difficile l'accesso dall'esterno della classe. Questo viene usato per creare attributi privati, difficili da sovrascrivere o usare accidentalmente nelle sottoclassi.

Esempio:

class MyClass:
    def __init__(self):
        self._protected = 1  # convenzione: attributo protetto
        self.__private = 2   # name mangling

obj = MyClass()
print(obj._protected)    # accesso possibile, ma non raccomandato
# print(obj.__private)   # genererà un AttributeError
print(obj._MyClass__private)  # accesso all'attributo "privato" tramite name mangling

Pertanto, un underscore singolo è una convenzione, doppio è un meccanismo di occultamento del nome.