1 2 3

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()

 

posted @ 2017-05-26 11:04  矜持小蝌蚪  阅读(217)  评论(0编辑  收藏  举报
levels of contents