1. 程式人生 > >day26 單繼承

day26 單繼承

繼承是建立新類的一種方式,目的就為了減少程式碼。表達了子類是父類的關係,比如狗是動物,教授是老師
一個類可以多個類繼承,所有語言都是這樣的
一個類可以繼承多個父類 ,只有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可以在外面呼叫父類的方法,不僅僅侷限於子類中呼叫父類