自定义 pprint.PrettyPrinter
pprint
模块的文档提到,PrettyPrinter.format
方法旨在使自定义格式化成为可能。
我发现可以在子类中重写此方法,但似乎无法让基类方法应用换行和缩进。
- 我有什么遗漏的吗?
- 是否有更好的方法来做到这一点(例如另一个模块)?
替代方案?
我查看了pretty
模块,它看起来很有趣,但似乎没有提供一种在不修改其他模块的情况下自定义其他模块中的类格式化的方法。
我想我正在寻找的是一种允许我提供类型(或函数)到处理节点的程序的映射的东西。 处理节点的程序将接受一个节点并返回其字符串表示形式以及子节点列表。 以此类推。
为什么我研究漂亮打印
我的最终目标是紧凑地打印 DocBook 格式的 xml.etree.ElementTree
的自定义格式化部分。
(我惊讶地发现 Python 对 DocBook 的支持不多。也许我在这方面错过了什么。)
我在一个名为xmlearn 的客户端中构建了一些基本功能,该客户端使用lxml。例如,要转储 Docbook 文件,可以执行以下操作:
xmlearn -i docbook_file.xml dump -f docbook -r book
虽然它有点粗糙,但它给了我想要的信息。
xmlearn 还有其他功能,比如构建图像和显示 XML 文档中标签之间关系的转储。这些与此问题几乎没有关系。
您还可以执行任意深度的转储,或指定 XPath 作为起始点集合。XPath 部分有点过时了,因此 docbook 特定格式并不是很成熟。
这仍然不是这个问题的真正答案。我仍然希望能在某个地方找到可定制的漂亮打印机。
prettyp([CrazyClass()])
无法正常工作。 - mic_e