如何检查Python类的层次结构?

11

假设我有一个X类,如何检查它的基类/基类等等?

我在使用Eclipse和PyDev,例如对于Java,你可以在类名上按下CTRL+T来查看继承关系,如下所示:

java.lang.Object
   java.lang.Number
       java.lang.Integer

Python可行吗?

如果无法在Eclipse PyDev中实现,我应该在哪里查找此信息?


2
这个问题在Python:列出层次结构中的所有基类中得到了解答。 - kojiro
5个回答

8
按f4键打开层次结构视图,当类名被高亮时。

7
此外,每个类都带有一个称为__mro__的属性,它给出了一个类可以继承方法或属性的所有父类。从左到右阅读它们。例如:
assert bool.__mro__ == (<class 'bool'>, <class 'int'>, <class 'object'>)
assert True.__class__.__mro__ == (<class 'bool'>, <class 'int'>, <class 'object'>)

2
此外,每个(新风格)类都有一个mro方法,因此您可以分别调用bool.mro()True.__class__.mro()(它返回列表而不是元组)。 - derenio

7

1
您还可以将类层次结构可视化为图片。
我使用Graphviz DOTpyreverse来可视化和探索大量的类(一个示例)。
假设您想要在parso库中绘制所有来自tree.py的类:
# Generate classes_tree_full.png with full UML-style class boxes
$ pyreverse -mn    -o png -p tree_full  Lib\site-packages\parso\python\tree.py

# Generate classes_tree_short.png with only class names in boxes
$ pyreverse -mn -k -o png -p tree_short Lib\site-packages\parso\python\tree.py

如果您想看到合格的类名,例如 parso.python.tree.Literal 而不仅仅是 Literal,请将 -mn 更改为 -my
注意: pyreverse 还支持通过glob模式处理多个文件。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接