问题:列出给定类的层次结构中的所有基类?
给定一个类Foo
(无论它是否是新型类),如何生成所有基类-在继承层次结构中的任何位置issubclass
?
回答 0
NewClass.mro()
方法解析相同的顺序返回:类及其所有祖先类的列表。
>>> class A(object):
>>> pass
>>>
>>> class B(A):
>>> pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
回答 1
请参阅python上的可用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>]
回答 2
inspect.getclasstree()
将创建一个嵌套的类及其基列表。用法:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
回答 3
您可以使用__bases__
类对象的元组:
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
返回的元组__bases__
具有其所有基类。
希望能帮助到你!
回答 4
在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中,每个类都继承自基础对象类。
回答 5
根据Python文档,我们还可以简单地使用class.__mro__
属性或class.mro()
方法:
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
>>> A.__mro__
(<class '__main__.A'>, <class 'object'>)
>>> object.__mro__
(<class 'object'>,)
>>>
>>> B.mro()
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>> A.mro()
[<class '__main__.A'>, <class 'object'>]
>>> object.mro()
[<class 'object'>]
>>> A in B.mro()
True
回答 6
尽管Jochen的回答非常有帮助和正确,但是您可以使用inspect模块的.getmro()方法获得类层次结构,但是突出显示Python的继承层次结构也很重要:
例如:
class MyClass(YourClass):
继承类
- 儿童班
- 派生类
- 子类
例如:
class YourClass(Object):
继承的类
- 家长班
- 基类
- 超类
一个类可以从另一个类继承-该类的属性是继承的-特别是其方法是继承的-这意味着继承(子)类的实例可以访问该继承(父)类的属性
实例->类->然后继承的类
使用
import inspect
inspect.getmro(MyClass)
将在Python中向您显示层次结构。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。