如何使我的类在Python中非常可打印?

Python有一个漂亮的打印机(pprint(…))。我想使我的类非常可打印。如果我提供某个接口,pretty print会以更好的方式打印我的实例吗

第8.11节中的Python文档展示了不同的示例,但没有示例说明如何使用户定义的类非常可打印

那么我的类需要提供什么样的接口呢?
有没有其他(可能更好的)格式化程序


用例:

我想漂亮地打印ConfigParser的内容,为此我创建了一个名为ExtendenConfigParser的扩展版本。因此,我有可能添加更多功能或添加匹配的漂亮打印界面

pprint不查找任何挂钩。pprint.PrettyPrinter使用分派模式;类上的一系列方法,键入class.\uu repr\uu引用

您可以子类化pprint.PrettyPrinter来教授您的课程:

将您的预打印程序分类(pprint.PrettyPrinter):
_dispatch=pprint.PrettyPrinter.\u dispatch.copy()
定义类型(自身、对象、流、缩进、余量、上下文、级别):
stream.write('YourType('))
self._格式(object.foo、流、缩进、余量+1、,
(上下文、级别)
self._格式(object.bar、stream、indent、allowment+1、,
(上下文、级别)
stream.write('))
_分派[YourType.\uuu repr\uuuu]=\upprint\uyourtype

然后直接使用该类漂亮地打印包含YourType实例的数据。请注意,这取决于具有自己的自定义\uuu repr\uu方法的类型

您还可以将函数直接插入到预打印机中自我被显式传入。对于第三方库,这可能是更好的选择:

来自pprint导入预打印程序的


如果isinstance(getattr(预印字机,“U分派”),dict:
#假设分派表方法仍然有效
def pprint_ExtendedConfigParser(打印机、对象、流、缩进、余量、上下文、级别):
#漂亮的印刷品!
PrettyPrinter.\u dispactch[ExtendedConfigParser.\uu repr\uuu]=pprint\u ExtendedConfigParser

请参阅pprint模块源代码,了解如何编写其他分派方法

像往常一样,像\u dispatch这样的单下划线名称是内部实现细节,可以在将来的版本中更改。不过,这是您在这里的最佳选择。派送表是在Python3.5中添加的,至少在Python3.5-3.9alpha中存在

发表评论