列出指定类的所有基类?
假设有一个类叫做 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'>)