列出给定类的层次结构中的所有基类?
-
05-07-2019 - |
题
给定一个类 Foo
(无论是一个 新风格 类与否),你如何生成 全部 基类 - 继承层次结构中的任何位置 - 它 issubclass
的?
解决方案
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'>)
其他提示
请参阅 __ 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>]
inspect.getclasstree()
将创建一个类及其基础的嵌套列表。
用法:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
你可以使用类对象的 __ bases __
元组:
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
__ bases __
返回的元组具有所有基类。
希望它有所帮助!
尽管 Jochen 的答案非常有帮助且正确,因为您可以使用检查模块的 .getmro() 方法获取类层次结构,但同样重要的是要强调 Python 的继承层次结构如下:
前任:
class MyClass(YourClass):
继承类
- 儿童班
- 派生类
- 子类
前任:
class YourClass(Object):
继承的类
- 家长班
- 基类
- 超类
一个类可以从另一个类继承 - 类的属性是继承的 - 特别是,它的方法被继承了 - 这意味着继承(子)类的实例可以访问继承(父)类的属性
实例 -> 类 -> 然后继承类
使用
import inspect
inspect.getmro(MyClass)
将向您展示 Python 中的层次结构。
在python 3.7中,你不需要导入inspect,type.mro会给你结果。
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
注意在python 3.x中,每个类都继承自基础对象类。
不隶属于 StackOverflow