Python经典类和新式类
#coding:utf-8 ''' 说明: 1.经典类和新式类在语法上很有明显的区别 class Animal: #经典类 pass class Animal(object): #新式类 pass ''' #经典类多继承 ''' 说明: 在经典类中,继承顺序为深度优先算法; 注意:Python3.X版本中,无论你用新式类或经典类,继承顺序都是广度优先算法 如下例继承顺序: class B ---> class A class C ---> class A class D ---> (class B),(class C) 其中: class A, class B, class C 三个类中都有一个共同的方法,f2 经典类中执行:D().f2()时 会优先执行哪个类中的f2()方法呢? 回答: 1.深度优先算法中,先执行同一级内最左侧,如果没有在返回它的父类查找 2.类D继承了两个父类B类和C类;class D(B,C),先执行同一级内最左侧的B类的f2方法,如果没有则返回它的父类A类执行f2方法 3.所以执行顺序为:B-->A--->C ''' class A: n = "A" def f2(self): print("f2 from A") class B(A): n = "B" def f1(self): print("from B") def f2(self): print("f2 from B") class C(A): n = "C" def f2(self): print("from C") class D(B,C): n = "D" d = D() d.f1() d.f2()
#新式类多继承 ''' 说明: 在新式中,继承顺序为广度优先算法; 注意:Python3.X版本中,无论你用新式类或经典类,继承顺序都是广度优先算法 如下例继承顺序: class B ---> class A class C ---> class A class D ---> (class B),(class C) 其中: class A, class B, class C 三个类中都有一个共同的方法,f2 执行:D().f2()时 会优先执行哪个类中的f2()方法呢? 回答: 1.广度优先算法中,在同一级内会遵循从左到右的顺序来执行 2.类D继承了两个父类B类和C类;class D(B,C),按照同一级内从左到右顺序执行,会先执行B类中的f2方法,如B类中没有则会向C类中寻找,如C类中也没有则会向上一级寻找,也就是A类 3.所以执行顺序为:B-->C--->A ''' class A: n = "A" def f2(self): print("f2 from A") class B(A): n = "B" def f1(self): print("from B") def f2(self): print("f2 from B") class C(A): n = "C" def f2(self): print("from C") class D(B,C): n = "D" d = D() d.f1() d.f2()