首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多重继承和MRO

Python多重继承和MRO
EN

Stack Overflow用户
提问于 2017-01-24 18:26:34
回答 2查看 1.3K关注 0票数 1

我目前正在准备python考试,但我还不了解Python3中的MRO和线性化。

代码语言:javascript
复制
class F: pass 
class G: pass 
class H: pass
class E(G,H): pass
class D(E,F): pass 
class C(E,G): pass
class B(C,H): pass
class A(D,B,E): pass

例如,在一个赋值中,存在一个问题,在A类的线性化中,E是否可能出现在C之前。

我如何确定它是否可行?如何尽可能简单地描述线性化算法(C3)?我真的很感谢在这方面的各种解释和资源,因为我很难理解Python中的线性化。

提前谢谢你!

EN

回答 2

Stack Overflow用户

发布于 2017-11-05 00:38:30

Python按照DFS顺序而不是BFS顺序查找父类或子类

代码语言:javascript
复制
# This order is called Method Resolution Order (`mro()`)

class A(object):
    def dothis(self):
        print('Doing this in A')

class B(A):
    pass

class C(object):
    def dothis(self):
        print('Doing this in C')

class D(B, C):
    pass

d_instance = D()
d_instance.dothis()
# METHOD RESOLUTION ORDER
print(D.mro())

'''
OUTPUT:

# Doing this in A
# [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>]

    A

    |               C

    B(A)          /
        \
            D(B, C)

RESOLUTION ORDER IS (DFS) = D-B-A-C



             A

        /       \

    B(A)         C(A)
        \       /
            D(B, C)

If the same class appears in mro, the earlier occurrences get removed
D-B-A-C-A -> D-B-C-A, hence still a DFS
RESOLUTION ORDER IS (In Diamond shape) = D-B-C-A


'''
票数 4
EN

Stack Overflow用户

发布于 2017-01-24 18:30:51

类E继承自G和H。

类G和H依赖(它们不从任何人继承)。

因为类E不依赖于类C,所以他可以在他之前被初始化

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41825723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档