2011-03-21 3 views
0

J'ai une classe simple en python qui a une fonction __str__(). Comme ceci:Chaîne d'instance Python dans une liste

class Foo(object): 
    def __init__(): 
     self.name = 'something' 

    def __str__(): 
     return self.name 

Ma vraie classe fait plus que cela, mais c'est un exemple.

Alors je fais ceci:

a = Foo() 
b = Foo() 

print a 
print b 
print [a,b] 

Sauf cette impression:

something 
something 
[<Foo object at HexString>,<Foo object at HexString>] 

Pourquoi la version imprimée dans la liste ne s'impriment le nom str de l'instance et est-il un moyen facile pour l'obtenir?

J'ai essayé de voir si __unicode__ est différent et ce n'est pas le cas.

Répondre

4

Vous devez ajouter une méthode __repr__ ainsi:

class Foo(object): 
    def __repr__(self): 
     return str(self) 

    def __str__(self): 
     return self.name 

Voir this question sur la différence entre __str__ et __repr__.

Notez également que vous manque les self arguments aux méthodes dans votre exemple de code ;-)

+0

de oups. Je tapais ça à la main et je les ai juste oubliés. Le vrai code est correct. – lovefaithswing

+0

Notez que l'implémentation par défaut de '__str __()' appelle simplement '__repr __()', donc si vous voulez que les deux fassent la même chose, il vous suffit de définir '__repr __()'. –

+0

@Sven: Bon à savoir, merci – Cameron

3

La représentation sous forme de chaîne de la liste appelle en réalité __repr__() sur chaque élément - il suffit donc d'écraser cette méthode.

Questions connexes