继承object类的就是新式类
不继承object类的就是新式类Python3 所有的类都继承object类,都是新式类
在python2中 不继承object的类都是经典类
继承object类的就是新式类了经典类:在Python3中不存在,在Python2中不主动继承object类
在python2中
class A:pass # 经典类
class B(object):pass #新式类
在python3中
class A:pass # 新式类
class B(object):pass #新式类
因为现在使用Python2的人不多了所以我们对于经典类不做过多讨论
我们只需要知道在多继承中经典类的继承顺序是遵循深度优先的
而新式类在继承中是广度优先的
深度优先-->在经典类中遵循深度优先(下一个点总是在继承的时候深度优先)
如 d继承c和b c和b 继承a
那么 d的继承顺序是d->c->a->b的
这样的继承顺序我们称之为深度优先
广度优先***-->在新式类中遵循宽度优先(下一个点总是在继承的时候既可以宽度或者广度优先)
class A:
def func(self):
print('A')
class B(A):
def func(self):
print('B')
class C(A):
def func(self):
print('C')
class D(C,B):
def func(self):
print('D')
d = D()
d.func()
当我将D类的funck方法注释掉后会出现C类的funck方法
当我注释掉C的时候如果是(新式类)就会先继承B类的funck方法
然后继承A类的funck方法
这个只是在广式优先中比较简单的多继承关系
广式优先是遵循c3算法的,而c3算法过于复杂我就不多赘述了,
当我们要处理比价复杂的广式优先的多继承关系的时候我们可以使用 对象.mro()来查看父类
方法.mro() 来查看广度优先
只存在于新式类中
class A:
def func(self):
print('A')
class B(A):
def func(self):
print('B')
class C(A):
def func(self):
print('C')
class D(C,B):
def func(self):
print('D')
d = D()
d.func()
print(D.mro())