Programación Orientada a Objetos en Python | Conjunto 2 (Ocultación de datos e impresión de objetos)

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *