码迷,mamicode.com
首页 > 编程语言 > 详细

python-类的继承

时间:2016-07-23 23:08:19      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:

1.简单继承

class F1:  #父类,或者基类
    def show(self):
        print(F1.show)

class F2(F1):  #表示F2继承F1。F2叫子类,或者派生类
    def bar(self):
        print(bar)

obj = F2()
obj.show()
obj.bar()

out:

F1.show
bar

2.父类和子类有相同的方法,优先执行子类中的方法

class F1:  #父类,或者基类
    def show(self):
        print(F1.show)

class F2(F1):  #表示F2继承F1。F2叫子类,或者派生类

    def bar(self):
        print(bar)
    def show(self):   #子类优先级高
        print(F2.show)

obj = F2()
obj.show()
obj.bar()

out:

F2.show
bar

3.子类中封装数据,父类中也可以访问

class F1:  #父类,或者基类
    def show(self):
        print(F1.show)
    def foo(self):
        print(self.name)

class F2(F1):  #表示F2继承F1。F2叫子类,或者派生类
    def __init__(self,name):
        self.name = name

    def bar(self):
        print(bar)


obj = F2(xiaoming)
obj.foo()    #输出是xiaoming , 继承就相当于把父类的方法放到了子类中,所以这里输出的是xiaoming

out:

4.复杂继承

class S1:
    def F1(self):
        self.F2()  #此时的self相当于对象obj
    def F2(self):
        print(S1.F2)

class S2(S1):
    def F3(self):
        self.F1()
    def F2(self):
        print(S2.F2)

obj = S2()
obj.F3()
#输出是S2.F2  , 执行过程:执行S2类中的F3方法时,会去执行self.F1()方法,因为S2中没有该方法,所以去父类中寻找,父类有该方法,
# 那么就执行父类中的F1()方法,在执行F1()方法时,会执行self.F2()。因为继承的本质是把父类的方法复制到子类中,
# 所以def F1(self):self.F2() 放到了S2类中,因为S2类中有F2方法,所以执行S2类中的F2()方法。子类和父类有相同的方法时,子类方法优先级高。

#只要到self.F2()这样的时候,直接回到原点寻找。例如该例子中应该回到S2类中寻找F2()方法,
# 发现子类S2中有该方法,那么直接执行。如果S2类中没有,那么去父类中寻找F2()方法

二、多继承

1、简单的多继承
class C0:
    def f1(self):
        print(C0_f1)
class C1(C0):

    def f2(self):
        print(C1_f2)

class C2:
    def f2(self):
        print(C2_f2)

class C3(C2,C1):   #从左到右继承,左边的优先级高
    def f3(self):
        pass

obj = C3()
obj.f2()    #输出C2_f2

out:

C2_f2

 

2、复杂的多继承

class C0:
    def f2(self):
        print(C0_f1)
class C1(C0):

    def f1(self):
        print(C1_f2)

class C2:
    def f2(self):
        print(C2_f2)

class C3(C1,C2):   #从左到右继承,左边的优先级高
    def f3(self):
        pass

obj = C3()
obj.f2()    #输出C0_f1

out:

C0_f1

执行流程:

技术分享

 
3、复杂继承关系
class C_2:
    def f2(self):
        print(C_2_f2)
class C_1(C_2):
    def f2(self):
        print(C_1_f2)
class C0(C_2):
    def f1(self):
        print(C0_f2)
class C1(C0):

    def f1(self):
        print(C1_f2)

class C2(C_1):
    def f2(self):
        print(C2_f2)

class C3(C1,C2):   #从左到右继承,左边的优先级高
    def f3(self):
        pass

obj = C3()
obj.f2()    #输出C0_f1

out:

C2_f2

执行流程

技术分享

总结:
如果子类的两个父类没有共同的父类的话,是一条道走到黑

如果子类的两个父类有共同的父类的话,是C1-->C0   然后是C2-->C_1-->C_2

python-类的继承

标签:

原文地址:http://www.cnblogs.com/pangguoping/p/5699630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!