如何在自定义python 3类中支持漂亮打印?

kdb*_*kdb 5 python pretty-print

为自定义python3类添加漂亮打印支持的最可靠方法是什么?

对于交互式数据评估,我发现漂亮的打印支持非常重要.但是,默认情况下,iPython的漂亮打印机IPython.lib.pretty.pprint和标准库pprint.pprint都只支持内置结构类型(列表,元组,字典),并将plain repr()用于其他所有内容.值得注意的是,这甚至包括其他非常有用的实用程序collections.namedtuple().

结果,漂亮的打印输出通常是奇怪的格式.

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

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

在一个真实世界的例子中,这导致了

{'__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'}
Run Code Online (Sandbox Code Playgroud)

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

弱相关:我的问题在python3中低级内省?最初旨在建立我自己的类不可知的漂亮打印机,但没有产生任何结果.

Sil*_*ron 3

对于ipython,漂亮打印机将在_repr_pretty_默认为 之前查找该方法__repr__

有关此功能的更多详细信息可以在ipython 文档中找到

pprint我所知,唯一的方法就是定制__repr__