day26 單繼承
阿新 • • 發佈:2018-11-06
繼承是建立新類的一種方式,目的就為了減少程式碼。表達了子類是父類的關係,比如狗是動物,教授是老師
一個類可以多個類繼承,所有語言都是這樣的
一個類可以繼承多個父類 ,只有python支援多繼承
子類可以找到父類,但是父類不知道自己幾個子類的,畢竟你建立的時候才不會知道會有幾個子類吧
子類只會和父類聯絡,彼此之間不聯絡
1 class A:pass # 父類,基類,超類 2 class B:pass # 父類,基類,超類 3 class A_son (A,B):pass # 子類 4 class AB_son(A,B):pass# 子類 5 print(A_son.__bases__) # 檢視父類 6 # (<class '__main__.A'>, <class '__main__.B'>) 7 print(A.__bases__) # 沒有父類的類預設屬於 "object" 祖宗類 8 # (<class 'object'>,)
1 # 狗類 看門 2 # 鳥類 下蛋 3 # 動物,吃,喝,跑 4 # 5 6 class Animal: 7 def __init__(self): 8 print("執行 Animal__init__") 9 self.func() 10 def eat(self): 11 print("it's can eat") 12 def run(self): 13 print("it's can run") 14 def dirnk(self): 15 print("it's can drink") 16 def func(self): 17 print("Animal__init__.func")18 class Dog(Animal): 19 def guard(self): 20 print("it's can guard") 21 def func(self): 22 print("Dog.func") 23 class brid(Animal): 24 def egg(self): 25 print("it's can egg")
人狗例項
1 class Animal: 2 def __init__(self,name,aggr,hp): 3 self.name = name 4 self.aggr = aggr 5 self.hp = hp 6 def eat(self): 7 print("%s吃藥回血" %self.name) 8 self.hp += 100 9 class Dog(Animal): 10 def __init__(self,name,aggr,hp,kind): 11 Animal.__init__(self,name,aggr,hp) # 呼叫父類,要帶上全部的引數 12 self.kind = kind # 派生屬性 13 def bite(self, person): 14 person.hp -= self.aggr 15 def eat(self): # 狗吃藥回血還能長牙 16 Animal.eat(self) # 吃藥基礎技能繼續呼叫父類 17 self.teech = 2 # 長牙了 18 19 class Person(Animal): 20 def __init__(self,name,aggr,hp,sex,money): 21 Animal.__init__(self,name,aggr,hp) # 呼叫父類 22 self.sex = sex # 派生屬性 23 self.money = money # 派生屬性 24 def attact(self, dog): 25 dog.hp -= self.aggr 26 suyang = Dog("蘇陽",1,1,"吉娃娃") 27 yangtuo = Person("羊駝",100,100,"天才",10000) 28 suyang.eat() # 蘇陽吃藥回血 29 print(suyang.hp) # 101 30 yangtuo.attact(suyang) 31 print(suyang.hp) # 1 32 suyang.eat() # 蘇陽吃藥回血 33 print(suyang.teech) # 2 # 狗獨有的方法長牙
總結:
父類中沒有的方法子類有,叫做派生方法
父類中沒有的方法子屬性,叫做派生屬性
只要子類的物件呼叫,子類有一定用子類,子類沒有才用父類,如果都沒有,報錯
如果還想用父類的,直接單獨父類呼叫吧,
單獨呼叫父類方法,記得自己傳self引數
super().func 不需要自己傳self了也可以實現 fulei.func的功能
1 lass Animal: 2 def __init__(self,name,aggr,hp): 3 self.name = name 4 self.aggr = aggr 5 self.hp = hp 6 def eat(self): 7 print("%s吃藥回血" %self.name) 8 self.hp += 100 9 class Dog(Animal): 10 def __init__(self,name,aggr,hp,kind): 11 super().__init__(name,aggr,hp) # 另一種方法呼叫父類,更加簡單一些,省略了類名,物件名 12 # 只在新式類中才有,python3中所有的類都是新式類 13 self.kind = kind # 派生屬性 14 15 suyang = Dog("蘇陽",1,1,"吉娃娃") 16 print(suyang.name) 17 super(Dog,suyang).eat() # super可以在外面呼叫父類的方法,不僅僅侷限於子類中呼叫父類