zoukankan      html  css  js  c++  java
  • 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类里面去找;

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






















  • 相关阅读:
    php中global和$GLOBALS[]的分析之一
    javascript 标签 src 链接动态文件。
    Allegro基本操作——PCB布线
    AMD单桥主板上电时序的详细解释
    AMD单双桥时序简叙
    AMD移动FP5平台时序解释
    orcad元件属性批量修改(通过excel表格)
    加减乘除基本函数
    1.excel如何让一列的数都乘以固定值
    ORCAD元件属性白色区域和黄色区域的理解
  • 原文地址:https://www.cnblogs.com/mululu/p/9106964.html
Copyright © 2011-2022 走看看