有没有一种简单的方法可以以树形式打印 class' 层次结构?

Is there a simple way to print a class' hierarchy in tree form?

是否有函数可以以树形式打印 python class' 层次结构,就像 git log --graph 对 git 提交所做的那样?

我想做的事的例子:

class A(object): pass
class B(A): pass
class C(B): pass
class D(A): pass
class E(C, D): pass

printtree(E)

输出可能的示例(但可以变化)。如果 mro 也可以直接从图表中读取,那么奖励积分,就像我在这里从上到下所做的那样,但如果不是,那也没关系。

E
|\
C |
| D
B |
|/
A
|
object

不,没有内置函数可以执行此操作,您必须构建自己的函数。但是知道布置和绘制 ASCII 图形是一项复杂的任务,Mercurial 图形代码(Python 相当于 git log --graph)是 quite involved and complicated.

将图形布局留给专用实用程序(如 Graphviz. Someone has already written the code to do this, see this article by Michele Simionato, Ph. D)会更有效率,它们将转向:

class M(type): pass # metaclass
class F(object): pass
class E(object): pass
class D(object): pass
class G(object): __metaclass__=M
class C(F,D,G): pass
class B(E,D): pass
class A(B,C): pass

进入

完成标签中列出的完整 MRO。虽然代码是在 15 多年前编写的,但它仍然可以按设计在 Python 3 上运行(我用 3.8.0a1 测试过)。