Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
986 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]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR