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.