Se è necessario scegliere tra __repr__
o __str__
andare per il primo, come per l'implementazione predefinita __str__
chiamate __repr__
quando non è stato definito.
personalizzato Vector3 esempio:
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)
In questo esempio, repr
ritorna ancora una volta una stringa che può essere consumato direttamente/eseguiti, mentre str
è più utile come output di debug.
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #Vector(x:1, y:2, z:3)
Vorrei creare un qualche tipo di decoratore di classi, così posso facilmente impostare rappresentazioni di stringhe personalizzate per le mie classi senza dover scrivere un metaclasse per ognuna di esse. Non ho molta familiarità con le metaclassi di Python, quindi puoi darmi qualche suggerimento lì? –
Purtroppo questo non può essere fatto con i decoratori di classe; deve essere impostato quando la classe è definita. –
@ Space_C0wb0y: è possibile aggiungere una stringa come '_representation' al corpo della classe e' return self._representation' nel metodo '__repr __()' del metaclass. –