In termini reali (praticamente), python non ha nulla chiamato variabile membro privato in Python. Tuttavia, l’aggiunta di due sottolineature (__) all’inizio rende privata una variabile o un metodo la convenzione utilizzata dalla maggior parte del codice python.
Capiamo questo concetto attraverso un esempio –
privateVar1.py
Live Demo
class myClass: __privateVar = 27; def __privMeth(self): print("I'm inside class myClass") def hello(self): print("Private Variable value: ",myClass.__privateVar)foo = myClass()foo.hello()foo.__privateMeth
Nel programma precedente, __privMeth è un metodo privato e __privateVar è una variabile privata. Vediamo ora il suo output-
Output
Private Variable value: 27Traceback (most recent call last): File "C:/Python/Python361/privateVar1.py", line 12, in <module> foo.__privateMethAttributeError: 'myClass' object has no attribute '__privateMeth'
Dall’output sopra, possiamo vedere che al di fuori della classe “myClass”, non è possibile accedere al metodo privato così come alla variabile privata. Tuttavia, all’interno della classe (myClass) possiamo accedere alle variabili private. Nel metodo hello (), è possibile accedere alla variabile __privateVar (come mostrato sopra: “Private Variable value: 27”).
Quindi dall’esempio precedente, possiamo capire che tutte le variabili e i metodi all’interno della classe sono pubblici con il metodo. Quando dichiariamo i dati membro come privato significa che sono accessibili solo lato della classe e sono inaccessibili al di fuori della classe. La tecnica di rendere privata una variabile o un metodo è chiamata mangling dei dati. Qualsiasi identificatore del modulo _ _ spam(almeno due caratteri di sottolineatura iniziali, al massimo un carattere di sottolineatura finale) viene sostituito testualmente con _classname__spam, dove classname è il nome della classe corrente con un trattino di sottolineatura iniziale rimosso. Questo mangling viene fatto indipendentemente dalla posizione sintattica dell’identificatore, purché si verifichi all’interno della definizione di una classe.
I nomi di sottolineatura doppia hanno lo scopo di evitare l’override accidentale da parte di una sottoclasse.