列出给定类的层次结构中所有的基类?(List all base classes in a hiera

2019-07-17 13:02发布

鉴于一类Foo (无论是新型的类或不),你如何生成所有的基类-继承层次结构中的任何地方-它issubclass的?

Answer 1:

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'>)


Answer 2:

__bases__性能上的蟒蛇可用的class ,它包含了基础类的元组:

>>> 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>]


Answer 3:

inspect.getclasstree()将创建的类和他们的基地嵌套列表。 用法:

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


Answer 4:

你可以使用__bases__类对象的元组:

class A(object, B, C):
    def __init__(self):
       pass
print A.__bases__

通过返回的元组__bases__了其所有的基类。

希望能帮助到你!



Answer 5:

尽管约亨的回答是非常有益的,正确的,因为你可以使用检查模块的.getmro()方法获得的类层次结构,这一点也很重要强调的是Python的继承层次如下:

例如:

class MyClass(YourClass):

继承类

  • 儿童类
  • 派生类
  • 子类

例如:

class YourClass(Object):

继承的类

  • 父类
  • Base类

一类可以从另一个继承 - 类由于继承 - 尤其是其方法是继承 - 这意味着继承(子)类的实例都可以访问归因于继承(父)类的

实例 - >类 - >然后继承的类

运用

import inspect
inspect.getmro(MyClass)

将显示您的层次结构,内Python的。



文章来源: List all base classes in a hierarchy of given class?