首先了解一下什么是经典类,什么是新式类

class Person: #经典类
    pass
class Person2(object):  #新式类
    pass
#类名首字母都大写
#在python3里面经典类和新式类没有任何区别

经典类与新式类在python3中是没有任何区别的,主要区别是在python2中多继承的时候。
区别:

  • 经典类是:深度优先
  • 新式类是:广度优先

在python3里面都是广度优先
下面我们举例子来说明:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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()

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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类里面去找;

画个比较丑的图更直观的说明一下:
Python中经典类和新式类的区别_编程语言
Python中经典类和新式类的区别_Python_02