Si tiene que elegir entre __repr__
o __str__
vaya para el primero, ya que la implementación predeterminada __str__
llama al __repr__
cuando no estaba definido.
ejemplo Vector3 personalizado:
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __repr__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __str__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
En este ejemplo, repr
vuelve de nuevo una cadena que puede ser consumido directamente/ejecutado, mientras que str
es más útil como un resultado de la depuración.
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #Vector(x:1, y:2, z:3)
Me gustaría crear algún tipo de decorador de clases, así puedo establecer fácilmente representaciones de cadenas personalizadas para mis clases sin tener que escribir una metaclase para cada una de ellas. No estoy muy familiarizado con las metaclases de Python, así que ¿puedes darme algún apuntador? –
Desafortunadamente esto no se puede hacer con decoradores de clase; debe establecerse cuando la clase está definida. –
@ Space_C0wb0y: Puede agregar una cadena como '_representation' al cuerpo de la clase y' return self._representation' en el método '__repr __()' de la metaclase. –