Python 3.x:替代pprint实现

时间:2013-05-19 10:03:30

标签: python python-3.x pprint

标准pprint模块在​​处理列表,dicts等时很不错。但有时完全无法使用自定义类:

  • 使其打印某些类对象的可用信息的唯一方法是覆盖__repr__,但如果我的班级已经很好,eval()'能够{{1}怎么办?哪个没有显示我想在pprint输出中看到的信息?

  • 好的,我会写一个面向印刷的__repr__,但在这种情况下,不可能在我的课堂上印刷一些东西:

__repr__

我无法打印class Data: def __init__(self): self.d = {...} 内容,我只能返回单行表示(至少不使用堆栈跟踪等)。   - 覆盖self.d不是一个选项,我不想每次想要打印同一个类时都这样做。

那么......是否有任何替代pprint可以使自定义类具有可打印性?

4 个答案:

答案 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。

  1. Download并解压缩pretty.py文件。
  2. 在其上运行2to3:

    python -m lib2to3 -w pretty.py
    
  3. 注释掉以下几行:

    569: types.DictProxyType:        _dict_pprinter_factory('<dictproxy {', '}>'),
    580: xrange:                     _repr_pprint,
    
  4. 将文件放在脚本附近。

  5. 照常导入:

    import pretty
    

答案 2 :(得分:1)

对于漂亮的打印,您可能正在寻找__str__而不是{或1} {/ 1}

e.g。

__repr__

答案 3 :(得分:0)

您可以创建一个通用解决方案,通过继承PrettyPrinter来打印对象字段的内容。 obj.__dict__会为您提供obj的所有字段的字典。

或者您可以使用obj.__class__.__name__ + pformat(obj.__dict__)