En términos reales (prácticamente), python no tiene nada llamado variable miembro privado en Python. Sin embargo, agregar dos subrayados(__) al principio hace que una variable o un método sea privado es la convención utilizada por la mayoría del código python.
Entendamos este concepto a través de un ejemplo −
privateVar1.py
Demostración en vivo
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
En el programa anterior, _ _ privMeth es un método privado y _ _ privateVar es una variable privada. Veamos ahora su salida:
Salida
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'
De la salida anterior, podemos ver que fuera de la clase «MyClass», no puede acceder al método privado ni a la variable privada. Sin embargo, dentro de la clase (MyClass) podemos acceder a las variables privadas. En el método hello (), se puede acceder a la variable __privateVar (como se muestra arriba: «Valor de variable privada: 27»).
Así que del ejemplo anterior, podemos entender que todas las variables y los métodos dentro de la clase son públicos por el método. Cuando declaramos el miembro de datos como privado, significa que solo son accesibles al lado de la clase y que son inaccesibles fuera de la clase. La técnica de hacer privada una variable o método se llama manipulación de datos. Cualquier identificador de la forma _ _ spam(al menos dos guiones bajos iniciales, a lo sumo un guion bajo final) se reemplaza textualmente con _classname__spam, donde classname es el nombre de clase actual con un guion bajo (s) inicial (es) despojado (s). Esta alteración se realiza sin tener en cuenta la posición sintáctica del identificador, siempre y cuando ocurra dentro de la definición de una clase.
Los nombres de doble guion bajo están destinados a evitar la sobreescritura accidental de una subclase en su lugar.