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 ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif) 
 
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, | 
 ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif)
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