J'apprends les cordes en Python. Lorsque j'essaie d'imprimer un objet de classe Foobar
à l'aide de la print()
fonction, j'obtiens une sortie comme celle-ci:
<__main__.Foobar instance at 0x7ff2a18c>
Existe-t-il un moyen de définir le comportement d'impression (ou la représentation sous forme de chaîne ) d'une classe et de ses objets ? Par exemple, lorsque j'appelle print()
un objet de classe, je voudrais imprimer ses membres de données dans un certain format. Comment y parvenir en Python?
Si vous êtes familier avec les classes C ++, ce qui précède peut être réalisé pour la norme ostream
en ajoutant une friend ostream& operator << (ostream&, const Foobar&)
méthode pour la classe.
Comme Chris Lutz l'a mentionné , cela est défini par la
__repr__
méthode de votre classe.À partir de la documentation de
repr()
:Étant donné le test de classe suivant:
..il agira de la manière suivante dans le shell Python:
Si aucune
__str__
méthode n'est définie,print(t)
(ouprint(str(t))
) utilisera le résultat de la__repr__
placeSi aucune
__repr__
méthode n'est définie, la valeur par défaut est utilisée, ce qui équivaut à peu près à ..la source
__str__
est différent des résultats du shell interactif que vous donnez. : P%
formatage de chaîne n'est pas déconseillé, à partir de docs.python.org/whatsnew/2.6.html "l'opérateur% est complété par une méthode de formatage de chaîne plus puissante, format ()"%
très pratique.Une manière générique qui peut être appliquée à n'importe quelle classe sans mise en forme spécifique pourrait être effectuée comme suit:
Et alors,
produit
la source
Si vous êtes dans une situation comme @Keith, vous pouvez essayer:
Cela va à l'encontre de ce que je considérerais comme un bon style, mais si vous essayez simplement de déboguer, il devrait faire ce que vous voulez.
la source
Juste pour ajouter mes deux cents à la réponse de @ dbr, voici un exemple de la façon de mettre en œuvre cette phrase à partir de la documentation officielle qu'il a citée:
Compte tenu de cette définition de classe:
Maintenant, il est facile de sérialiser une instance de
Test
classe:Donc, en exécutant le dernier morceau de code, nous obtiendrons:
Mais, comme je l'ai dit dans mon dernier commentaire: plus d'informations sont juste ici !
la source
Vous devez utiliser
__repr__
. Il s'agit d'une fonction standard comme__init__
. Par exemple:la source
Une version plus jolie de la réponse de @ user394430
Produit une liste visuellement agréable des noms et des valeurs.
Une version encore plus sophistiquée (merci Ruud) trie les articles:
la source
Pour Python 3:
Si le format spécifique n'est pas important (par exemple pour le débogage), héritez simplement de la classe Printable ci-dessous. Pas besoin d'écrire du code pour chaque objet.
Inspiré par cette réponse
la source
Il y a déjà beaucoup de réponses dans ce fil mais aucune ne m'a particulièrement aidé, j'ai dû le résoudre moi-même, donc j'espère que celle-ci est un peu plus informative.
Vous devez juste vous assurer d'avoir des parenthèses à la fin de votre cours, par exemple:
Voici un exemple de code d'un projet sur lequel je travaillais:
Pour imprimer ma classe Hydrogène, j'ai utilisé ce qui suit:
Veuillez noter que cela ne fonctionnera pas sans les parenthèses à la fin de l'hydrogène. Ils sont nécessaires.
J'espère que cela vous aidera, faites-moi savoir si vous avez d'autres questions.
la source