标准pprint
模块在处理列表,dicts等时很不错。但有时完全无法使用自定义类:
使其打印某些类对象的可用信息的唯一方法是覆盖__repr__
,但如果我的班级已经很好,eval()
'能够{{1}怎么办?哪个没有显示我想在pprint输出中看到的信息?
好的,我会写一个面向印刷的__repr__
,但在这种情况下,不可能在我的课堂上印刷一些东西:
__repr__
我无法打印class Data:
def __init__(self):
self.d = {...}
内容,我只能返回单行表示(至少不使用堆栈跟踪等)。
- 覆盖self.d
不是一个选项,我不想每次想要打印同一个类时都这样做。
那么......是否有任何替代pprint可以使自定义类具有可打印性?
答案 0 :(得分:4)
在IPython中有一个经过改进和维护的Python 2.x / 3.x端口的“漂亮”库:http://ipython.org/ipython-doc/stable/api/generated/IPython.lib.pretty.html
答案 1 :(得分:3)
如果the pretty module满足您的需求,您可以使用Python 3。
pretty.py
文件。在其上运行2to3:
python -m lib2to3 -w pretty.py
注释掉以下几行:
569: types.DictProxyType: _dict_pprinter_factory('<dictproxy {', '}>'),
580: xrange: _repr_pprint,
将文件放在脚本附近。
照常导入:
import pretty
答案 2 :(得分:1)
对于漂亮的打印,您可能正在寻找__str__
而不是{或1} {/ 1}
e.g。
__repr__
答案 3 :(得分:0)
您可以创建一个通用解决方案,通过继承PrettyPrinter来打印对象字段的内容。
obj.__dict__
会为您提供obj
的所有字段的字典。
或者您可以使用obj.__class__.__name__ + pformat(obj.__dict__)
。