Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1777 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  unicode, __str__, __ref__ et affichage [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

unicode, __str__, __ref__ et affichage [résolu]

n°1210519
suizokukan
Posté le 29-09-2005 à 10:03:53  profilanswer
 

Bonjour à tous !
 
Soit ma classe C :
 

Code :
  1. class C(object) :
  2. ______...
  3. ______def __repr__(self):
  4. ____________return u"ligne unicode\\n"+u"suite sur une nouvelle ligne"


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)

Code :
  1. ______def __repr__(self):
  2. ____________return "ligne str\\n"+"suite sur une nouvelle ligne"


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
mood
Publicité
Posté le 29-09-2005 à 10:03:53  profilanswer
 

n°1210523
Taz
bisounours-codeur
Posté le 29-09-2005 à 10:07:46  profilanswer
 

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)


Message édité par Taz le 29-09-2005 à 10:11:19
n°1210551
suizokukan
Posté le 29-09-2005 à 10:21:13  profilanswer
 

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...>

n°1210605
masklinn
í dag viðrar vel til loftárása
Posté le 29-09-2005 à 10:49:20  profilanswer
 

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]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1210628
suizokukan
Posté le 29-09-2005 à 11:02:04  profilanswer
 

> d'accord Masklinn.
 
J'ai un autre problème. Si je crée une liste d'objets du genre :

Code :
  1. l = [ C(), C() ]
  2. print l


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 ?

n°1210646
masklinn
í dag viðrar vel til loftárása
Posté le 29-09-2005 à 11:24:17  profilanswer
 

suizokukan a écrit :

> d'accord Masklinn.
 
J'ai un autre problème. Si je crée une liste d'objets du genre :

Code :
  1. l = [ C(), C() ]
  2. print l


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 ?


 :heink:  
 
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]


Message édité par masklinn le 29-09-2005 à 11:24:45

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1210648
suizokukan
Posté le 29-09-2005 à 11:27:55  profilanswer
 

> 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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  unicode, __str__, __ref__ et affichage [résolu]

 

Sujets relatifs
[ASP.NET] - Access denied sur un site web de prod. [RÉSOLU][Résolu] Expressions régulières et classes
[Résolu] Dao : function replace() & access 2000[résolu] pb longueur de chaîne avec dbi:PgPP
[RESOLU]Fonction Excel STXT[Résolu] Problème de division
[java] ChangedCharSetException [RESOLU][Resolu] Plusieurs requetes MySQL > Syntaxe PHP ?
[Résolu] Migration VBA --> VBwtring et caracteres unicode hexa
Plus de sujets relatifs à : unicode, __str__, __ref__ et affichage [résolu]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)