standard pPrint code> module est agréable quand des offres avec des listes, des dicts et ainsi de suite. Mais parfois complètement inutilisable avec des classes personnalisées:
Le seul moyen de le faire imprimer des informations utilisables sur un objet de certaines catégories consiste à remplacer OK, je vais écrire un code . p> Je ne peux pas jolie-impression Alors ... y a-t-il des alternatives à PPrint qui permet de faire une classe personnalisée jolie-imprimable? p> p> __ RECR __ code>, mais si ma classe a déjà bien, eval () Code> 'capable __ RECR __ code> qui ne montre pas les informations que je veux voir dans PPRTRINTOPUT? P> LI>
__ RECR __ code>, mais dans ce cas, il est impossible de jolie-impression quelque chose à l'intérieur de ma classe: p> li>
ul> self.d code> contenu, je ne peux pas renvoyer une représentation d'une ligne uniquement (au moins sans jouer avec des traces, etc.).
- Remplacer prettyprinter code> n'est pas une option, je ne veux pas le faire à chaque fois que je veux assez d'imprimer la même classe. P>
4 Réponses :
Pour jolie imprimer, vous recherchez E.g. p> __ str __ code> au lieu de (ou aussi bien que) __ rep __ code>
Maintenant, imaginez que, au lieu de DateTime, vous avez une classe avec plusieurs dict code> s assez gros pour qu'ils ne rentrent pas dans une rangée terminale. Et puis vous avez un dict code> avec plusieurs objets ... c'est mon cas.
si Le joli module satisfait à vos besoins, vous pouvez le faire fonctionner avec Python 3 .
jolie.py code> fichier. li>
-
Run 2to3 dessus: p>
XXX PRE> LI>
-
commenter les lignes suivantes: p>
XXX PRE> LI>
-
Placez le fichier près de votre script. p> li>
-
importer comme d'habitude: p>
XXX PRE> LI>
ol> p>
@Equidamoid: Avez-vous réussi?
Cependant, jolie code> n'aime pas Numpy.ndarray = (
Vous pouvez créer une solution générique qui imprime le contenu des champs d'objet par sous-classement PrettyPritter.
ou vous pouvez simplement utiliser obj .__ dict __ code> vous donnera un dictionnaire de tous les champs de obj code>. p>
obj .__ classe __.__ nom__ + pFormat (obj .__ dict __) code>. p>.
Il y a un port amélioré et maintenu Python 2.x / 3X de la bibliothèque "jolie" de ipython: https://ipython.readthedocs.io/en/stable/api/generated/ipython.lib.pretty.html p>
Trouvé pypi.python.org/pypi/pretty/0.1 , mais il semble être py2.x seulement
"Je peux retourner une représentation d'une ligne uniquement" - pourquoi est-ce? NUMPY PAR EXEMPLE RETOURS LA RECUIT MULTI-LIGNES REC () S qui fonctionne simplement bien. Voici un exemple, comme une chaîne Python:
"([(0, 0, (0, 0, 0)), (0, 0, (0, 0, 0)), (0, 0, ( 0, 0, 0)), \ n (0, 0, (0, 0, 0))], \ n dtype = [('foo', 'u1'), ('bar', '. Ça eval () est bien, avec "tableau" dans l'espace de noms. @ kampu je voulais dire que je ne peux pas retourner la chaîne multiligne car il va casser
imprimer code> indentation.Ouais, j'ai essayé de modifier et d'indiquer que je venais de réaliser cela, mais la période de grâce de 5min de la montage avait été manquée. Bon à savoir que nous sommes sur la même page, de toute façon :)
@Equidamoid, si vous avez besoin d'une solution Python 3, veuillez l'indiquer dans votre question et ajouter une balise appropriée.
Et pourquoi le sous-classement
prettyprinter code> pas une option?Et pourquoi est-il impossible de jolie-impression quelque chose à l'intérieur de votre classe en cas d'écriture d'une personnalisation
__ rep __ code>? La chaîne qu'elle revient peut contenir une représentation de tout domaine de votre objet.@uthapngo fait. Oups, la phrase sur le sous-classement est incorrecte un peu%%) Je ne veux tout simplement pas ajouter de support à la classe particulière à
prettprinter code> (car le code spécifique de classe ne devrait pas être là) et Pour la solution "générique", telle que celle mentionnée dans mon 1er commentaire.@uthapngo Il est impossible de générer une chaîne multiligne appropriée dans
__ RECR __ code> en raison du niveau d'indentation de courant inconnu.