• Python经典类和新式类


    #coding:utf-8
    '''
    说明:
    1.经典类和新式类在语法上很有明显的区别
    
    class Animal:   #经典类
        pass
    
    class Animal(object):   #新式类
        pass
    '''
    
    
    
    #经典类多继承
    '''
    说明:
    在经典类中,继承顺序为深度优先算法;
    注意:Python3.X版本中,无论你用新式类或经典类,继承顺序都是广度优先算法
    
    如下例继承顺序:
    class B ---> class A
    class C ---> class A
    class D ---> (class B),(class C)
    
    其中:
    class A, class B, class C 三个类中都有一个共同的方法,f2
    
    经典类中执行:D().f2()时
    会优先执行哪个类中的f2()方法呢?
    
    回答:
    1.深度优先算法中,先执行同一级内最左侧,如果没有在返回它的父类查找
    2.类D继承了两个父类B类和C类;class D(B,C),先执行同一级内最左侧的B类的f2方法,如果没有则返回它的父类A类执行f2方法
    3.所以执行顺序为:B-->A--->C
    '''
    class A:
        n = "A"
        def f2(self):
            print("f2 from A")
    class B(A):
        n = "B"
        def f1(self):
            print("from B")
        def f2(self):
            print("f2 from B")
    class C(A):
        n = "C"
        def f2(self):
            print("from C")
    class D(B,C):
        n = "D"
    
    d = D()
    d.f1()
    d.f2()

    #新式类多继承
    '''
    说明:
    在新式中,继承顺序为广度优先算法;
    注意:Python3.X版本中,无论你用新式类或经典类,继承顺序都是广度优先算法
    
    如下例继承顺序:
    class B ---> class A
    class C ---> class A
    class D ---> (class B),(class C)
    
    其中:
    class A, class B, class C 三个类中都有一个共同的方法,f2
    
    执行:D().f2()时
    会优先执行哪个类中的f2()方法呢?
    
    回答:
    1.广度优先算法中,在同一级内会遵循从左到右的顺序来执行
    2.类D继承了两个父类B类和C类;class D(B,C),按照同一级内从左到右顺序执行,会先执行B类中的f2方法,如B类中没有则会向C类中寻找,如C类中也没有则会向上一级寻找,也就是A类
    3.所以执行顺序为:B-->C--->A
    '''
    class A:
        n = "A"
        def f2(self):
            print("f2 from A")
    class B(A):
        n = "B"
        def f1(self):
            print("from B")
        def f2(self):
            print("f2 from B")
    class C(A):
        n = "C"
        def f2(self):
            print("from C")
    class D(B,C):
        n = "D"
    
    d = D()
    d.f1()
    d.f2()
  • 相关阅读:
    ibatis中isEquals、isNotEmpty的用法
    truncate与delete 、drop的区别
    javaweb学习总结二十二(servlet开发中常见的问题汇总)
    ORACLE时间函数(SYSDATE)深入理解
    大数据
    javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)
    javaweb学习总结二十(http响应)
    javaweb学习总结十九(http协议概述以及http请求信息分析)
    Telnet客户端连接服务器,看不见字符,只显示横线
    Eclipse打JAR包的使用
  • 原文地址:https://www.cnblogs.com/l729414559/p/6907479.html
Copyright © 2020-2023  润新知