Prerrequisito: Programación Orientada a Objetos en Python | Conjunto 1 (Clase, Objeto y Miembros)
ocultación de datos
En Python, usamos un guión bajo doble (o __) antes del nombre de los atributos y esos atributos no serán visibles directamente afuera.
Python
class MyClass: # Hidden member of MyClass __hiddenVariable = 0 # A member method that changes # __hiddenVariable def add(self, increment): self.__hiddenVariable += increment print (self.__hiddenVariable) # Driver code myObject = MyClass() myObject.add(2) myObject.add(5) # This line causes error print (myObject.__hiddenVariable)
Producción :
2 7 Traceback (most recent call last): File "filename.py", line 13, in print (myObject.__hiddenVariable) AttributeError: MyClass instance has no attribute '__hiddenVariable'
En el programa anterior, intentamos acceder a una variable oculta fuera de la clase usando un objeto y lanzó una excepción.
Podemos acceder al valor de un atributo oculto mediante una sintaxis complicada:
Python
# A Python program to demonstrate that hidden # members can be accessed outside a class class MyClass: # Hidden member of MyClass __hiddenVariable = 10 # Driver code myObject = MyClass() print(myObject._MyClass__hiddenVariable)
Producción :
10
Los métodos privados son accesibles fuera de su clase, pero no fácilmente accesibles. Nada en Python es verdaderamente privado; internamente , los nombres de los métodos y atributos privados se modifican y se modifican sobre la marcha para que parezcan inaccesibles por sus nombres de pila [Consulte esto para obtener la fuente].
Objetos de impresión
Los objetos de impresión nos dan información sobre los objetos con los que estamos trabajando. En C++, podemos hacer esto agregando un método amigo ostream& operator << (ostream&, const Foobar&) para la clase. En Java, usamos el método toString().
En Python, esto se puede lograr usando los métodos __repr__ o __str__.
Python
class Test: def __init__(self, a, b): self.a = a self.b = b def __repr__(self): return "Test a:%s b:%s" % (self.a, self.b) def __str__(self): return "From str method of Test: a is %s," \ "b is %s" % (self.a, self.b) # Driver Code t = Test(1234, 5678) print(t) # This calls __str__() print([t]) # This calls __repr__()
Producción :
From str method of Test: a is 1234,b is 5678 [Test a:1234 b:5678]
Puntos importantes sobre la impresión:
- Si no se define ningún método __str__, print t (o print str(t)) usa __repr__.
Python
class Test: def __init__(self, a, b): self.a = a self.b = b def __repr__(self): return "Test a:%s b:%s" % (self.a, self.b) # Driver Code t = Test(1234, 5678) print(t)
Producción :
Test a:1234 b:5678
- Si no se define ningún método __repr__, se usa el predeterminado.
Python
class Test: def __init__(self, a, b): self.a = a self.b = b # Driver Code t = Test(1234, 5678) print(t)
Producción :
<__main__.Test instance at 0x7fa079da6710>
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA