Python类和实例属性的查找顺序学习笔记(mro)

一个简单的例子

class A:
    name = "1"
    def __init__(self):
        self.name = "aaa"

if __name__ == '__main__':
    a = A()
    print(a.name)
结果为:aaa

查找顺序:由下而上,第一步查询实例的name,如果查不到则向上查找,查找到类的name

关于MRO(C3真的牛逼)

查找网上资料了解下即可
附上代码,自己复习的时候体会:
第一种:菱形继承

class D:
    pass


class C(D):
    pass


class B(D):
    pass


class A(B,C):
    pass


if __name__ == '__main__':
    print(A.__mro__)
 
(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <class 'object'>)

第二种:

class E:
    pass


class D:
    pass


class C(E):
    pass


class B(D):
    pass


class A(B,C):
    pass
(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.E'>, <class 'object'>)

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/106861284
今日推荐