#经典类
class A():pass
#新式类
class A(object):pass
继承 object 类的是新式类,不继承 object 类的是经典类
python2.1及其以前的版本,经典类是唯一可用的形式
python2.2开始 加入了新式类
我们在写自定义的类的时候,往往都是继承自object。object 是python中所有类的基类,继承自它无可厚非,如果我们不继承它行不行?当然行,但是二者会有区别
class A(object):def foo(self):print("A::foo()")class B(A):passclass C(A):def foo(self):print("C::foo()")class D(B,C):passd = D()
d.foo()
python2 or python3 执行的结果都是一样的 "C::foo()"
class A():def foo(self):print("A::foo()")class B(A):passclass C(A):def foo(self):print("C::foo()")class D(B,C):passd = D()
d.foo()
python2 和 python3执行的结果是不一样的
也就是说 在python2 中 是否继承自object 对于结果是不一样的,而在python3中没有这个区别。
至于为何在python2中会有区别,那就是因为python2中 有新式类 和 经典类的区别
python3之所以没有区别,调用的都是C中的foo 是因为python3中新式类貌似已经兼容了经典类,无论 A 是否继承 object 类, D 实例中的 foo() 都会执行 C 中的 foo() 。但是在 Python 2.7 中这种差异仍然存在,因此还是推荐使用新式类,要继承 object 类。
上边说的搜索路径 就是mro,后边我们在单独分析mro 具体是如何得到的。。。
python中的MRO_zhangdell的专栏-CSDN博客