zoukankan      html  css  js  c++  java
  • 继承&派生 属性查找

    #单继承背景下,无论是新式类还是经典类属性查找顺序都一样
    # 先object->类->父类->...

    实例:

    class Foo:
        def f1(self):
            print('Foo.f1')
    
        def f2(self):
            print('Foo.f2')
            self.f1() #obj.f1()
    
    class Bar(Foo):
        def f1(self):
            print('Bar.f1')
    
    obj=Bar()
    obj.f2()  

    结果:

    Foo.f2
    Bar.f1
    # 在多继承背景下,如果一个子类继承了多个分支,但是多个分支没有汇聚到一个非object类,无论是新式类还是经典类属性查找顺序都一样:
    # 会按照从左到右的顺序一个分支一个分支的查找下去

    实例:

    class E:
        xxx='E'
        pass
    
    class F:
        xxx='F'
        pass
    
    class B(E):
        xxx='B'
        pass
    
    class C(F):
        xxx='C'
        pass
    
    class D:
        xxx='D'
        pass
    
    class A(B,C,D):
        xxx='A'
        pass
    
    obj=A()
    # obj.xxx=111
    print(obj.xxx)  #查找xxx
    print(A.mro())

    结果:

    A
    [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>,<class '__main__.C'>, <class '__main__.F'>, <class '__main__.D'>, <class 'object'>]
    # 在多继承背景下,如果一个子类继承了多个分支,但是多个分支最终汇聚到一个非object类(菱形继承问题)
    # 新式类:广度优先查找:obj->A->B->E->C->F->D->G->object
    # 经典类:深度优先查找:obj->A->B->E->G->C->F->D (只有出现菱形继承的python2中)
     
    #实例:
    class G:
        xxx='G'
    
    class E(G):
        xxx='E'
        pass
    
    class F(G):
        xxx='F'
        pass
    
    class B(E):
        xxx='B'
        pass
    
    class C(F):
        xxx='C'
        pass
    
    class D(G):
        xxx='D'
        pass
    
    class A(B,C,D):
        xxx='A'
        pass
    print(A.mro())

    结果;

    [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.F'>, <class '__main__.D'>, <class '__main__.G'>, <class 'object'>]

    属性查找顺序

        总的来说:属性查找就是按照MRO列表进行的。

  • 相关阅读:
    MySQL Generic Binaries包和RPM包的区别?
    实体零售如何构建数据管理体系及未来方向
    python3 数据分析
    power designer 资料库表查询
    PowerDesigner 连接资料库
    电商数据分析的基本指标体系
    初中数学动点最值问题19大模型+例题详解
    初中数学全年级26个专题知识点精编汇总
    Python数据分析学习路径拆解及资源推荐
    十种常用的数据分析方法
  • 原文地址:https://www.cnblogs.com/TF511/p/9838704.html
Copyright © 2011-2022 走看看