In werkelijke termen (praktisch) heeft python geen Private Member variabele in Python. Echter, het toevoegen van twee onderstrepingen (__) aan het begin maakt een variabele of een methode privé is de conventie die door de meeste python code wordt gebruikt.
laten we dit concept begrijpen door middel van een voorbeeld –
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
in het bovenstaande programma is __privMeth een private methode en __privateVar is een private variabele. Laten we de uitvoer nu eens bekijken –
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'
uit de bovenstaande uitvoer kunnen we zien dat je buiten de klasse” myClass ” geen toegang hebt tot zowel de private methode als de private variabele. Echter, binnen de klasse (myClass) kunnen we toegang krijgen tot de privé variabelen. In de methode hello () kan de variabele _ _ privateVar benaderd worden (zoals hierboven getoond: “Private Variable value: 27”).
dus uit het bovenstaande voorbeeld kunnen we begrijpen dat alle variabelen en methoden binnen de klasse openbaar zijn door de methode. Wanneer we datalid als privé verklaren, betekent dit dat ze alleen toegankelijk zijn aan de kant van de klasse en ontoegankelijk zijn buiten de klasse. De techniek van het maken van een variabele of methode privé heet data mangling. Elke identifier van het formulier __spam (ten minste twee leidende underscore ‘ s, ten hoogste één achterliggende underscore) wordt tekstueel vervangen door _classname__spam, waarbij classname de huidige class naam is met een leidende underscore(s) gestript. Dit verminken wordt gedaan zonder rekening te houden met de syntactische positie van de identifier, zolang het plaatsvindt binnen de definitie van een klasse.
Dubbele underscore namen zijn bedoeld om per ongeluk overschrijven door een subklasse te voorkomen.