向自定义python3类添加 pretty-print 支持的最可靠方法是什么?

对于交互式数据评估,我发现 pretty-print 支持非常重要。但是,默认情况下,iPython的 pretty-print IPython.lib.pretty.pprint和标准库pprint.pprint仅支持内置结构类型(列表,元组,字典),其他所有内容都使用普通repr()。值得注意的是,它甚至还包括其他极有用的实用程序,例如collections.namedtuple()

结果, pretty-print 的输出经常被奇怪地格式化。

我当前的解决方法是定义类似的类

class MyPrettyClass(dict):
    def __init__(self, ...):
        self.__dict__ = self
        self._class = self.__class__ # In order to recognize the type.
        ...
        <A LOT OF FIELDS>
        ...

在一个真实的例子中,这导致
{'__lp_mockup_xml': <lxml.etree._ElementTree object at 0x0000021C5EB53DC8>,
 '__lp_mockup_xml_file': 'E:\\DataDirectory\\mockup.xml',
 '__lp_realrun_xml_file': 'E:\\DataDirectory\\realrun.xml',
 '_class': <class '__main__.readall'>,
 '_docopy': False,
 'dirname': 'E:\\DataDirectory'}

有没有更好的方法来获得漂亮的打印支持?

弱相关:我的问题Lowlevel introspection in python3?最初旨在构建自己的与类无关的 pretty-print ,但未产生任何结果。

最佳答案

对于ipython, pretty-print 将在默认为_repr_pretty_之前查找__repr__方法。

有关此功能的更多详细信息,请参见ipython doc

使用pprint,我知道的唯一方法是自定义__repr__

关于python - 如何在自定义python 3类中支持 pretty-print ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42815822/

10-11 07:40