1 #Author : Kelvin 2 #Date : 2019/1/16 18:57 3 4 class Father: 5 money=1000 6 7 def __init__(self,name): 8 print("父類的init方法...") 9 self.name=name 10 11 def teach(self): 12 print("%s 正在教兒子學習..."%self.name) 13 14 class Son(Father): 15 pass 16 17 18 s=Son("kelvin") 19 print(s) 20 #>>>: 父類的init方法... 21 #>>>: <__main__.Son object at 0x0000018B1A1AEEB8> 22 s.teach() 23 # >>>: kelvin 正在教兒子學習...
可見,即便Son類沒有定義init方法,money屬性和teach方法,可是因爲Son類繼承了Father類,因此在實例化Son時能夠使用父類的屬性值和方法。函數
使用繼承的最大做用就是定義一種規範。讓繼承者按照規範進行書寫代碼。工具
第一種:普通類繼承。缺點:不能限制子類根據父類的規範定義函數。學習
1 #Author : Kelvin 2 #Date : 2019/1/16 19:53 3 4 class Basic(): 5 6 def eat(self): 7 pass 8 9 def drink(self): 10 pass 11 12 class People(Basic): 13 def __init__(self,name): 14 self.name=name 15 def eat(self): 16 print("%s吃飯"%self.name) 17 def drink(self): 18 print("%s喝水"%self.name) 19 20 class Cat(Basic): 21 def __init__(self,name): 22 self.name=name 23 def eat(self): 24 print("%s吃飯"%self.name) 25 26 c=Cat("貓咪") 27 c.eat() 28 c.drink()
很明顯,代碼能夠執行,說明子類即便不按照父類定義的標準執行,也不會報錯。很明顯父類不能起到規定的做用。接下來能夠使用這種實現:spa
1 #Author : Kelvin 2 #Date : 2019/1/16 19:53 3 import abc 4 class Basic(metaclass=abc.ABCMeta): 5 @abc.abstractmethod 6 def eat(self): 7 pass 8 @abc.abstractmethod 9 def drink(self): 10 pass 11 12 class People(Basic): 13 def __init__(self,name): 14 self.name=name 15 def eat(self): 16 print("%s吃飯"%self.name) 17 def drink(self): 18 print("%s喝水"%self.name) 19 20 class Cat(Basic): 21 def __init__(self,name): 22 self.name=name 23 def eat(self): 24 print("%s吃飯"%self.name) 25 26 c=Cat("貓咪") 27 c.eat() 28 c.drink()
此時,因爲Cat類繼承了Basic,可是因爲Basic類作了限制,繼承Basic類必須實現全部Basic中的方法,可是Cat中只實現了部分方法,所以程序報錯。設計
若是在子類中定義了和父類同名的屬性和成員方法時,如何才能調用父類屬性和方法呢?繼承
1 #Author : Kelvin 2 #Date : 2019/1/16 20:45 3 4 class way: 5 def __init__(self,name,speed): 6 self.name=name 7 self.speed=speed 8 def run(self): 9 print("全部交通工具!") 10 11 class subway(way): 12 def __init__(self,name,speed,line): 13 # way.__init__(self,name,speed) 14 # super(subway, self).__init__() 15 super().__init__(name,speed) 16 self.line=line 17 def run(self): 18 # way.run(self) 19 # super(subway, self).run() 20 super().run() 21 print("地鐵交通工具!") 22 23 s=subway("徐州地鐵","10km/min","13號線路") 24 s.run()
註釋的兩種方式能夠實現相同效果!接口