有关继承的更多内容可参考:https://www.cnblogs.com/luoxun/p/13468850.html
一 继承
(1)什么是继承?
1 class Parent(object): 2 3 def implicit(self): 4 print("PARENT implicit()") 5 6 class Child(Parent): 7 pass 8 9 dad = Parent() 10 son = Child() 11 12 dad.implicit() 13 son.implicit()
1 class Parent(object): 2 3 def override(self): 4 print("PARENT override()") 5 6 class Child(Parent): 7 8 def override(self): 9 print("CHILD override()") 10 11 dad = Parent() 12 son = Child() 13 14 dad.override() 15 son.override()
1 class Parent(object): 2 3 def altered(self): 4 print("PARENT altered()") 5 6 class Child(Parent): 7 8 def altered(self): 9 print("CHILD BEFORE PARENT altered()") 10 super(Child,self).altered() 11 print("CHILD AFTER PARENT altered()") 12 13 dad = Parent() 14 son = Child() 15 16 dad.altered() 17 son.altered()
1 class Parent(object): # 父类 2 3 def implicit(self): # 用来表示隐式继承的方法,在子类中没有被重写 4 print("PARENT implicit()") 5 6 def override(self): # 用来表示显示继承的方法,在子类中被重写,但是没有被通过super方法调用 7 print("PARENT override()") 8 9 def altered(self): # 用来表示显示继承的方法,在子类中不仅被重写还被super方法调用了 10 print("PARENT altered()") 11 12 class Child(Parent): # Child是子类,继承了Parent类,即Parent类中所有的方法Child类都可以直接调用 13 14 def override(self): # 重写父类中的override方法 15 print("CHILD override()") 16 17 def altered(self): # 重写父类中的altered方法 18 print("CHILD BEFORE PARENT altered()") 19 super(Child,self).altered() # 使用super方法调用了父类的altered方法 20 print("CHILD AFTER PARENT altered()") 21 22 dad = Parent() # dad是父类Parent的对象 23 son = Child() # son是子类Child的对象 24 25 dad.implicit() # 通过父类类对象dad掉用父类中的implicit方法 26 son.implicit() # 通过子类类对象son调用父类中的implicit方法 27 28 dad.override() # 通过父类类对象dad掉用父类中的override方法 29 son.override() # 通过子类类对象son调用子类中的override方法,该方法父类中也存在,但子类中对它进行了重写;此时子类的类对象son已经无法直接调用父类的override方法了 30 31 dad.altered() # 通过父类类对象dad掉用父类中的altered方法 32 son.altered() # 通过子类类对象son调用子类中的altered方法,子类对父类的altered方法进行了重写,并在重写过程中用super方法调用了父类的方法,同时子类的类对象son无法直接调用父类的altered方法
(2)super方法
1 class SuperFun (Child, BadStuff): 2 pass
1 class Child (Parent): 2 3 def __init__(self, stuff): 4 self.stuff = stuff 5 super(Child, self).__init__( )
二 组合
1 class Other(object): 2 3 def implicit(self): 4 print("OTHER implicit()") 5 6 def override(self): 7 print("OTHER override()") 8 9 def altered(self): 10 print("OTHER altered()") 11 12 class Child(object): 13 14 def __init__(self): 15 self.other = Other() 16 17 def implicit(self): 18 self.other.implicit() 19 20 def override(self): 21 print("CHILD override()") 22 23 def altered(self): 24 print("CHILD BEFORE PARENT altered()") 25 self.other.altered() 26 print("CHILD AFTER PARENT altered()") 27 28 son = Child() 29 30 son.implicit() 31 son.override() 32 son.altered()
三 什么时候使用继承和组合?
原文:https://www.cnblogs.com/luoxun/p/13476773.html