#隐式继承(子类完全继承父类):父类有函数,但是子类没有时, 

 #就会发生子类的动作完全等同于父类上的动作 



 class parent(object):#父类 

     def implicit(self):#父类里的函数 

         print("parent:父辈,implicit:隐式") 



 class child(parent):#子类 

     pass#子类留空 



 dad = parent() 

 son = child() 



 dad.implicit() 

 son.implicit()#子类直接调用父类的函数 



 parent().implicit()#不用变量也可以,用变量是为了美观和简便 

 child().implicit() 





 #显示覆盖(子类完全覆盖父类):在子类中定义一个相同名称的函数, 

 #可以让子类的函数在继承父类时有一个不同的行为 



 class parent(object): 

     def override(self): 

         print("parent override:父类的重写") 



 class child(parent): 

     def override(self):#子类的函数名称和父类里的函数名字要一样 

         print("child override:子类的重写") 



 dad = parent() 

 son = child() 



 dad.override() 

 son.override()#子类的函数覆盖了父类的函数,实现自己独有的动作 





 #(子类部分覆盖父类):在父类的函数运行之前或者运行之后, 

 #再覆盖子类的函数,达到子类部分覆盖父类函数的效果 



 class parent(object): 

     def altered(self): 

         print("parent altered:父类的改变") 



 class child(parent): 

     def altered(self): 

         print("子类覆盖父类的函数之前")#子类自己的动作 

          

         super(child,self).altered() 

         #super(子类名,self).父类函数名(),调用父类函数动作 

         #完整解释:用“子类名”和“self”这两个参数 

         #调用super函数,然后参数返回到父类函数中 

          

         print("子类覆盖父类函数之后")#回到子类自己的动作 



 dad = parent() 

 son = child() 



 dad.altered() 

 son.altered() 



 #最终版本: 

 print("................") 

 class parent(object): 

     def override(self): 

         print("父类的重写") 



     def implicit(self): 

         print("父类的隐式") 



     def altered(self): 

         print("父类的改变") 



 class child(parent): 

     def override(self): 

         print("子类的重写") 



     def altered(self): 

         print("子类覆盖父类的函数之前") 

         super(child,self).altered() 

         print("子类覆盖父类函数之后") 



 dad = parent() 

 son = child() 



 dad.implicit() 

 son.implicit() 

 print("-"*20) 

 dad.override() 

 son.override() 

 print("-"*20) 

 dad.altered() 

 print("-"*20) 

 son.altered() 





 print("-"*20) 



 print("1、(完全覆盖)子类有和父类同名的函数时,用子类自己的函数内容") 

 print("2、(继承父类)子类用的函数名在子类中没有,而在父类中有时,用父类的函数内容") 

 print("3、(部分覆盖)子类和父类有同名的函数,但是子类函数里有super函数时," 

       "super这一行的函数用父类里的内容。非super同行的函数继续用子类自己的内容") 



 class child(parent): 

     def __init__(self,stuff): 

         self.stuff = stuff 

         super(child,self).__init__() 

 #super常和__init__函数配合使用,对子类做一些事情,然后再对父类进行初始化 





 #合成模式,如下所示,child直接使用Other这个类,或者别的模块也可以,不是继承Other 

 #这里不是父子类child是Other的关系,而是child里面有Other的关系。 



 class Other(object):#一个父类 

     def override(self): 

         print("Other的重写") 



     def implicit(self): 

         print("Other的隐式") 



     def altered(self): 

         print("Other的改变") 



 class child(object):#也是一个独立的父类 

     def __init__(self): 

         self.other=Other() 

         #对child这个大类做一个初始化,然后在child这个类里设置一个self.other代表Other()的变量 



     def implicit(self): 

         self.other.implicit() 



     def override(self): 

         print("子类的重写") 



     def altered(self): 

         print("子类覆盖之前") 

         self.other.altered() 

         print("子类覆盖之后") 



 son = child() 



 son.implicit() 

 son.override() 

 son.altered()