__str__
, __repr__
¶class TarjetaCredito:
def __init__(self, nombre, apellidos, numero):
self.nombre = nombre
self.apellidos = apellidos
self.numero = numero
visa1 = TarjetaCredito("Jorge", "Ruiz", "1256 5425 2000 4565")
visa2 = TarjetaCredito("Susana", "Paz", "0469 1258 3000 4757")
Si queremos imprimir la instancia creada (visa1) no veremos sus atributos sino un objeto con su dirección de memoria.
visa1 # vemos el objeto con su dirección de memoria, pero no sus atributos
<__main__.TarjetaCredito at 0x227ee956970>
print(visa2) # vemos el objeto con su dirección de memoria, pero no sus atributos
<__main__.TarjetaCredito object at 0x00000227EE956A00>
__str__
¶class TarjetaCredito:
def __init__(self, nombre, apellidos, numero):
self.nombre = nombre
self.apellidos = apellidos
self.numero = numero
def __str__(self):
return f"Soy {self.nombre} {self.apellidos} y mi número de VISA es {self.numero}."
visa1 = TarjetaCredito("Jorge", "Ruiz", "1256 5425 2000 4565")
visa2 = TarjetaCredito("Susana", "Paz", "0469 1258 3000 4757")
print(visa1) # ahora si vemos un contenido más amigable del objeto viendo sus atributos
print(visa2) # necesitamos poner un print pq __str__ va con return
Soy Jorge Ruiz y mi número de VISA es 1256 5425 2000 4565. Soy Susana Paz y mi número de VISA es 0469 1258 3000 4757.
__repr__
¶Para una representación formal del objeto.
class TarjetaCredito:
def __init__(self, nombre, apellidos, numero):
self.nombre = nombre
self.apellidos = apellidos
self.numero = numero
def __repr__(self): # ahora no usamos str sino repr
return f"{self.nombre} \
\n{self.apellidos} \
\n{self.numero}"
visa1 = TarjetaCredito("Jorge", "Ruiz", "1256 5425 2000 4565")
visa2 = TarjetaCredito("Susana", "Paz", "0469 1258 3000 4757")
print(visa1)
print("= "*12)
print(visa2)
Jorge Ruiz 1256 5425 2000 4565 = = = = = = = = = = = = Susana Paz 0469 1258 3000 4757
class TarjetaCredito:
def __init__(self, nombre, apellidos, numero):
self.nombre = nombre
self.apellidos = apellidos
self.numero = numero
def __str__(self): # tenemos tanto str como repr
return f"Soy {self.nombre} {self.apellidos} y mi número de VISA es {self.numero}."
def __repr__(self): # tenemos tanto str como repr
return f"{self.nombre} \
\n{self.apellidos} \
\n{self.numero}"
visa1 = TarjetaCredito("Jorge", "Ruiz", "1256 5425 2000 4565")
visa2 = TarjetaCredito("Susana", "Paz", "0469 1258 3000 4757")
print(visa1) # cuando están los dos (str y repr) domina str
print("= "*30)
print(visa2) # obtenemos una frase informal informando sobre el objeto
Soy Jorge Ruiz y mi número de VISA es 1256 5425 2000 4565. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Soy Susana Paz y mi número de VISA es 0469 1258 3000 4757.
class TarjetaCredito:
def __init__(self, nombre, apellidos, numero):
self.nombre = nombre
self.apellidos = apellidos
self.numero = numero
def __str__(self):
return f"Soy {self.nombre} {self.apellidos} y mi número de VISA es {self.numero}."
def __repr__(self):
return f"{self.nombre} \
\n{self.apellidos} \
\n{self.numero}"
visa1 = TarjetaCredito("Jorge", "Ruiz", "1256 5425 2000 4565")
visa2 = TarjetaCredito("Susana", "Paz", "0469 1258 3000 4757")
print(visa1) # impresión informal con str
Soy Jorge Ruiz y mi número de VISA es 1256 5425 2000 4565.
print({visa2}) # representación formal con repr, pero salen los corchetes
{Susana Paz 0469 1258 3000 4757}
print(f"{visa2 !r}") # así obtenemos la representación formal limpia, es necesario poner !r
Susana Paz 0469 1258 3000 4757
__str__
y __repr__
¶En Python, los métodos __str__
y __repr__
son métodos especiales que se utilizan para representar una clase de objetos como una cadena de caracteres. La diferencia entre ellos es que __str__
se utiliza para representar la clase de objetos como una cadena de caracteres legible para humanos, mientras que __repr__
se utiliza para representar la clase de objetos como una cadena de caracteres legible para Python.
Aquí hay un ejemplo que ilustra la diferencia entre los dos métodos:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def __str__(self):
return f"{self.nombre} tiene {self.edad} años."
def __repr__(self):
return f"Persona('{self.nombre}', {self.edad})"
p = Persona("Juan", 30)
print(str(p))
print(repr(p))
p
Juan tiene 30 años. Persona('Juan', 30)
Persona('Juan', 30)