10
votes

Python 3.x: Mise en œuvre de l'alternative PPRTR

standard pPrint 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 __ RECR __ , mais si ma classe a déjà bien, eval () 'capable __ RECR __ qui ne montre pas les informations que je veux voir dans PPRTRINTOPUT?

  • OK, je vais écrire un code __ RECR __ , mais dans ce cas, il est impossible de jolie-impression quelque chose à l'intérieur de ma classe:

    . xxx

    Je ne peux pas jolie-impression self.d contenu, je ne peux pas renvoyer une représentation d'une ligne uniquement (au moins sans jouer avec des traces, etc.). - Remplacer prettyprinter n'est pas une option, je ne veux pas le faire à chaque fois que je veux assez d'imprimer la même classe.

    Alors ... y a-t-il des alternatives à PPrint qui permet de faire une classe personnalisée jolie-imprimable?


9 commentaires

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 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 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 __ ? 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 (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 __ en raison du niveau d'indentation de courant inconnu.


4 Réponses :


1
votes

Pour jolie imprimer, vous recherchez __ str __ au lieu de (ou aussi bien que) __ rep __

E.g. xxx


1 commentaires

Maintenant, imaginez que, au lieu de DateTime, vous avez une classe avec plusieurs dict s assez gros pour qu'ils ne rentrent pas dans une rangée terminale. Et puis vous avez un dict avec plusieurs objets ... c'est mon cas.



3
votes

si Le joli module satisfait à vos besoins, vous pouvez le faire fonctionner avec Python 3 .

  1. Télécharger et décompresser le jolie.py fichier.
  2. Run 2to3 dessus: XXX

  3. commenter les lignes suivantes: XXX

  4. Placez le fichier près de votre script.

  5. importer comme d'habitude: XXX


2 commentaires

@Equidamoid: Avez-vous réussi?


Cependant, jolie n'aime pas Numpy.ndarray = (



0
votes

Vous pouvez créer une solution générique qui imprime le contenu des champs d'objet par sous-classement PrettyPritter. obj .__ dict __ vous donnera un dictionnaire de tous les champs de obj .

ou vous pouvez simplement utiliser obj .__ classe __.__ nom__ + pFormat (obj .__ dict __) . .


0 commentaires

4
votes

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


0 commentaires