列出指定类的所有基类?

195 投票
7 回答
107054 浏览
提问于 2025-04-15 14:11

假设有一个类叫做 Foo(不管它是新式类还是旧式类),我们想知道如何找出它的所有父类,也就是在继承关系中,Foo 是哪些类的子类。

7 个回答

44

inspect.getclasstree() 这个函数会生成一个包含类及其父类的嵌套列表。简单来说,它可以帮助你查看一个类的结构,包括它是从哪些其他类继承而来的。使用方法如下:

inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
53

可以查看这个__bases__ 属性,它是 Python 中一个类的特性,里面包含了一个元组,元组里是这个类的父类。

>>> def classlookup(cls):
...     c = list(cls.__bases__)
...     for base in c:
...         c.extend(classlookup(base))
...     return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
249

inspect.getmro(cls) 这个函数可以用在新式和旧式类上,它的作用是返回一个列表,这个列表包含了这个类以及它所有的父类,顺序是按照方法解析的顺序排列的。这和 NewClass.mro() 返回的结果是一样的。

>>> class A(object):
>>>     pass
>>>
>>> class B(A):
>>>     pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)

撰写回答