2009-10-23 3 views
1

Je veux écrire le mien __repr__ pour une classe que je définis. Je veux qu'il soit similaire à la valeur par défaut <__main__.O object at 0x00D229D0>, sauf avoir quelques autres détails là-bas. Comment puis-je reproduire cette chose <__main__.O object at 0x00D229D0>?Rouler mon propre __repr__

+1

Savez-vous que __repr__ devrait être un évaluateur expression lisible? Si vous voulez avoir une expression lisible par l'utilisateur, utilisez __str__ – freiksenet

+5

bien eval'able ou entre – u0b34a0f6ae

Répondre

5

Voir http://docs.python.org/reference/datamodel.html#object.repr

#!/usr/bin/env python 
class O(object): 
    def __repr__(self): 
     return '<%s.%s object at 0x%x>'%(self.__module__,self.__class__.__name__,id(self)) 
o=O() 
print(repr(o)) 

# <__main__.O object at 0xb7e7d0cc> 
+1

en utilisant __name__ comme cela donnera de faux résultats pour les sous-classes non définies dans le même module! – u0b34a0f6ae

+0

Merci d'avoir signalé cela. Fixé. – unutbu

3

Vous pouvez écrire votre propre rééd comme ceci:

class Test (object): 
    def __repr__(self): 
    t = type(self) 
    return "<Instance of %s.%s at %x>" % (t.__module__, t.__name__, id(self)) 
Questions connexes