如何在自定义 python 3 类 中支持漂亮打印?
How to support pretty-printing in custom python 3 classes?
向自定义 python3 classes 添加漂亮打印支持的最可靠方法是什么?
对于交互式数据评估,我发现漂亮的打印支持非常重要。然而,iPython 的漂亮打印机 IPython.lib.pretty.pprint
和标准库 pprint.pprint
默认只支持内置结构类型(列表、元组、字典),并使用普通的 repr()
其他一切。值得注意的是,这甚至包括其他非常有用的实用程序,如 collections.namedtuple()
.
因此,漂亮的打印输出通常格式很奇怪。
我目前笨拙的解决方法是定义 class 类似
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? 最初旨在构建我自己的 class 不可知的漂亮打印机,但没有产生任何结果。
对于ipython
,pretty-printer会在默认为__repr__
之前寻找_repr_pretty_
方法。
有关此功能的更多详细信息,请参阅 ipython doc
使用 pprint
,我知道的唯一方法是自定义 __repr__
。
向自定义 python3 classes 添加漂亮打印支持的最可靠方法是什么?
对于交互式数据评估,我发现漂亮的打印支持非常重要。然而,iPython 的漂亮打印机 IPython.lib.pretty.pprint
和标准库 pprint.pprint
默认只支持内置结构类型(列表、元组、字典),并使用普通的 repr()
其他一切。值得注意的是,这甚至包括其他非常有用的实用程序,如 collections.namedtuple()
.
因此,漂亮的打印输出通常格式很奇怪。
我目前笨拙的解决方法是定义 class 类似
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? 最初旨在构建我自己的 class 不可知的漂亮打印机,但没有产生任何结果。
对于ipython
,pretty-printer会在默认为__repr__
之前寻找_repr_pretty_
方法。
有关此功能的更多详细信息,请参阅 ipython doc
使用 pprint
,我知道的唯一方法是自定义 __repr__
。