是否有一个函数可以像树git log --graph
那样用git commits打印树状的python类的继承关系?
我想做的事的例子:
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
答案 0 :(得分:5)
不,没有内置函数可以执行此操作,您必须构建自己的函数。但要知道布置和绘制ASCII图是一项复杂的任务,Mercurial绘图代码(Python等效于git log --graph
)是quite involved and complicated。
将图形布局留给Graphviz之类的专用实用程序会更有效率。有人已经编写了实现此目的的代码,请参见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上进行了测试)。