• python学习笔记(二十六)经典类和新式类的区别


    首先了解一下什么是经典类,什么是新式类
    class Person: #经典类
        pass
    class Person2(object):  #新式类
        pass
    #类名首字母都大写
    #在python3里面经典类和新式类没有任何区别
    经典类与新式类在python3中是没有任何区别的,主要区别是在python2中多继承的时候。
    区别:
    经典类是:深度优先
    新式类是:广度优先
    在python3里面都是广度优先
    下面我们举例子来说明:
    class A:   #这样定义A是经典类
        def x(self):
            print('A')
    class B(A):
        # def x(self):
        #     print('B')
        pass
    class C(A):
        def x(self):
            print('C')
    
    class D(B,C):
        pass
    s = D()
    s.x()
    class A(object):   #这样定义A是新式类
        def x(self):
            print('A')
    class B(A):
        # def x(self):
        #     print('B')
        pass
    class C(A):
        def x(self):
            print('C')
    
    class D(B,C):
        pass
    s = D()
    s.x()

    以下分析情况都是基于python2

    1.这样定义A类,A是经典类,那么在继承后D调用x()方法的时候顺序是怎样的呢?

       首先是从B类里面去找x()方法,如果B类中没有,就会从A类里面去找,如果A类中也没有x()方法,最后才会从C类里面去找;

    2.那么如果A类定义的时候是新式类,那么在继承后D调用x()方法的时候顺序是怎样的呢?

      首先是从B类里面去找x()方法,如果B类中没有,就会从C类里面去找,如果C类中也没有x()方法,最后才会从A类里面去找;

    画个比较丑的图更直观的说明一下:






















  • 相关阅读:
    The Clollections Hierarchy 集合层次结构
    js 点点滴滴
    jquery select 操作
    jqueryaddoptionselect
    两个表的更新、表的复制
    备份数据库 还原数据库
    Stack递归反转与递归排序
    Stack两栈实现队列
    Stack设计Min函数栈(用一个栈或者用两个栈模拟)
    Queue两队列实现栈
  • 原文地址:https://www.cnblogs.com/mululu/p/9106964.html
Copyright © 2020-2023  润新知