în termeni reali (practic), python nu are nimic numit variabilă membru privat în Python. Cu toate acestea, adăugarea a două sublinieri(__) la început face ca o variabilă sau o metodă privată să fie Convenția utilizată de majoritatea codului python.
să înțelegem acest concept printr −un exemplu –
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
în programul de mai sus, __privMeth este o metodă privată și __privateVar este o variabilă privată. Să vedem ieșirea sa Acum −
ieșire
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'
Din ieșirea de mai sus, putem vedea că în afara clasei „myClass”, nu puteți accesa metoda privată, precum și variabila privată. Cu toate acestea, în interiorul clasei (myClass) putem accesa variabilele private. În metoda hello (), variabila _ _ privateVar poate fi accesată (așa cum se arată mai sus: „valoare variabilă privată: 27”).
deci, din exemplul de mai sus, putem înțelege că toate variabilele și metodele din interiorul clasei sunt publice prin metoda. Când declarăm membrul de date ca fiind privat, înseamnă că acestea sunt accesibile numai din partea clasei și sunt inaccesibile în afara clasei. Tehnica de a face o variabilă sau o metodă privată se numește mangling de date. Orice identificator al formularului _ _ spam(cel puțin două subliniere principale, cel mult un subliniere finală) este înlocuit textual cu _classname__spam, unde classname este numele clasei curente cu un subliniere principală (e) dezbrăcat. Această mutilare se face fără a ține cont de poziția sintactică a identificatorului, atâta timp cât apare în definiția unei clase.
numele de subliniere dublă sunt menite să evite suprascrierea accidentală de către o subclasă.