unicode, __str__, __ref__ et affichage [résolu] - Python - Programmation
Marsh Posté le 29-09-2005 à 10:07:46
c'est normal, repr est fait pour ça : visualiser tout. ça évite les surprises. Si tu veux du lisible pour humain, utilise __str__.
Edit : dans les deux cas, tout dépend du context. print interprète bien tous les caractères. il utilise de préférence __str__. si tu veux l'affichage brut de repr, utilise repr(o)
Marsh Posté le 29-09-2005 à 10:21:13
Merci Taz, je vais récapituler - merci de m'indiquer si je me trompe.
Lors d'un appel du genre print C() :
* c'est C.__str__() qui est appelée si cette fonction existe. Dans ce cas les caractères spéciaux sont interprétés.
* c'est C.__repr__() qui est appelée si C.__str()__ n'existe pas. Dans ce cas les caractères spéciaux ne sont pas interprétés.
* si aucune de ces deux fonctions n'existe, on a droit au message <C object at 0x...>
Marsh Posté le 29-09-2005 à 10:49:20
suizokukan a écrit : * si aucune de ces deux fonctions n'existe, on a droit au message <C object at 0x...> |
C'est l'appel au __repr__ par défaut de l'objet
Marsh Posté le 29-09-2005 à 11:02:04
> d'accord Masklinn.
J'ai un autre problème. Si je crée une liste d'objets du genre :
Code :
|
je me rends compte que c'est toujours C.__repr__() qui est utilisée même quand C.__str__() existe. Pourquoi ? et comment résoudre ce problème ?
Marsh Posté le 29-09-2005 à 11:24:17
suizokukan a écrit : > d'accord Masklinn.
|
Ce que tu stockes dans ta liste, ce sont des objets, donc ce qui s'affiche quand tu imprimes ta liste en raw c'est le __repr__, c'est à dire ce qui permet d'identifier (et normalement de reconstruire) les objets, ça me semble logique.
Si tu veux imprimer tes objets de manière "humainement lisible", tu fais
for i in l: print i, |
Marsh Posté le 29-09-2005 à 11:27:55
> Merci Masklinn et désolé pour cette dernière question, un peu niaise.
En passant, j'indique qu'utiliser pprint.pprint( l ) pour afficher la liste ne résout pas le problème.
Bonne journée à tous.
Marsh Posté le 29-09-2005 à 10:03:53
Bonjour à tous !
Soit ma classe C :
Quand je fais un print C() la fonction __repr__() me renvoie une chaîne sur une seule ligne sans interpréter \n . Le résultat est :
ligne unicode\nsuite sur une nouvelle ligne
Par contre si j'écris __repr()__ ainsi : (sans le format unicode)
j'obtiens bien, après un print C() , deux lignes de résultat. Pourquoi ? __repr__() ne doit renvoyer que le type str, pas le type unicode ?
edit : problème pour afficher l'anti-slash dans du code.
Message édité par suizokukan le 29-09-2005 à 11:25:21