向自定义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/