在Python中获取一个类的所有基类

在 Python 中获取一个类的所有基类

Get all base classes of a class in Python

使用该inspect.getmro()方法获取给定类的所有基类,例如print(inspect.getmro(Developer)). getmro()方法返回一个包含所提供类的基类的元组。

main.py
import inspect class Person(): pass class Employee(Person): pass class Developer(Employee): pass # 👇️ (<class '__main__.Developer'>, <class '__main__.Employee'>, <class '__main__.Person'>, <class 'object'>) print(inspect.getmro(Developer)) d1 = Developer() # 👇️ (<class '__main__.Developer'>, <class '__main__.Employee'>, <class '__main__.Person'>, <class 'object'>) print(inspect.getmro(type(d1))) # 👇️ (<class '__main__.Employee'>,) print(Developer.__bases__)

我们使用了
inspect.getmro
方法来获取给定类的基类的元组。

MRO 是方法解析顺序的缩写。

提供的类是元组中的第一个元素,没有类出现超过一次。

如果您只能访问该类的一个实例,请
type()在调用该getmro()方法时将该实例传递给该类。

main.py
import inspect class Person(): pass class Employee(Person): pass class Developer(Employee): pass d1 = Developer() # 👇️ (<class '__main__.Developer'>, <class '__main__.Employee'>, <class '__main__.Person'>, <class 'object'>) print(inspect.getmro(type(d1)))

类型类返回对象的类型

最常见的返回值与访问__class__
对象的属性相同。

类也有一个__mro__属性。

main.py
class Person(): pass class Employee(Person): pass class Developer(Employee): pass # 👇️ (<class '__main__.Developer'>, <class '__main__.Employee'>, <class '__main__.Person'>, <class 'object'>) print(Developer.__mro__)


_ _ mro _ _
属性返回在方法解析期间查找基类时考虑的类的元组。

类有一个mro()在类实例化时调用的方法。mro()方法的输出存储在__mro__属性中。

main.py
class Person(): pass class Employee(Person): pass class Developer(Employee): pass # 👇️ [<class '__main__.Developer'>, <class '__main__.Employee'>, <class '__main__.Person'>, <class 'object'>] print(Developer.mro())

class.mro方法可以被元
覆盖以自定义类实例的方法解析顺序,但这不是您经常必须做的事情。

如果您只需要获取给定类的直接基类,请使用该
class.__bases__属性。

main.py
class Person(): pass class Employee(Person): pass class Developer(Employee): pass # 👇️ (<class '__main__.Employee'>,) print(Developer.__bases__)


_ _ bases _ _
属性返回给定类的直接基类的元组。