给定一个类 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中,每个类都继承自基础对象类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top