python-类的继承
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
UnixFBI 运维特工
www.unixfbi.com