一、繼承
#動物#
#老虎、獅子、大象
#動物有共性
##定義一個動物:1.有4條腿;2.陸地上跑;3.需要進食(屬性+能力)
##貓:同上(繼承了動物的屬性和能力)
##老鼠:同上#Python里面也有這種結構,class類的繼承
#1#案例貓
class Animal:?? #父類def run(self):print('Animal is running...')class Cat(Animal):? #子類 (子類中,填父類的名字)繼承==>所有屬性+方法passcat=Cat()
cat.run()
#2#練習老鼠
class Animal:?? #父類def run(self):print('Animal is running...')class Cat(Animal):? #子類 (子類中,填父類的名字)繼承==>所有屬性+方法passclass Mouse(Animal):passcat=Cat()
cat.run()mouse=Mouse()
mouse.run()
#3#父類里面,構造函數(若父類有構造函數)
class Animal:def __init__(self,food):#父類,傳參self.legs=4self.food=fooddef run(self):print('Animal is running...')class Cat(Animal):passclass Mouse(Animal):passcat=Cat("fish")#則子類,也要傳參#實例化子類
print(cat.legs)
print(cat.food)#實例化#mouse=Mouse("苞谷")
#print(cat.legs)
#print(mouse.food)
#4#子類 繼承 父類原因?? [子類可繼承+創建其他方法]
# 類比于,神話故事父親有神力 ==傳承 給自己的孩子==> 孩子出生就有父親的所有能力(這種神力)+同時也有屬于自己的能力==>后輩越來越強#5#父類里面,構造函數
class Animal:def __init__(self,food):#父類,傳參self.legs=4self.food=fooddef run(self):print('Animal is running...')class Cat(Animal):def ability(self):print('the cat can catch mice')class Mouse(Animal):pass####父類不能用子類方法,報錯
animal=Animal()
animal.ability()
二、 多態
#剛剛 子類 繼承 父類
##子類對繼承過來的情況,進行更改#動物=>1.貓 2.老鼠
#所以,[吃東西]這個類,在[動物/貓/老鼠]有不同的表現,對該功能進行重寫==>多態
#多態=以繼承為前提,在繼承的基礎上進行重構
class Animal:def __init__(self,food):#父類,傳參self.legs=4self.food=fooddef eat(self):print('I like eating')class Cat(Animal):
# passdef eat(self):print('I like eating '+self.food)#多態,#???? [改變子類中的方法;不影響父類中方法的內容]#同一個方法名,可以出現2種不同的形態,在類的多態中,對構造函數的[重構]#對兩個對象調用eat方法,結果一樣? =======>但貓吃魚,改變結果
animal=Animal("food")
animal.eat()cat=Cat("fish")
cat.eat()#繼承父類#多態:既可以改變[子類的方法],又[不改變父類方法的內容]
三、重構
#重構:保留父類屬性+自己屬性 [先繼承,再重構]
#父類中不合適的進行重構
class Animal:def __init__(self,food):#父類,傳參self.legs=4self.food=fooddef eat(self):print('I like eating')class Cat(Animal):
#---#新構造函數------------------------------------------def __init__(self,food,color):Animal.__init__(self,food)#繼承父類的,構造函數(參數與父類一致)self.color=color#添加自己的屬性
#------------------------------------------------------def eat(self):print('I like eating'+self.food)#多態,#???? [改變子類中的方法;不影響父類中方法的內容]#同一個方法名,可以出現2種不同的形態,在類的多態中,對構造函數的[重構]animal=Animal("food")
animal.eat()cat=Cat("fish",'white')#new屬性color
cat.eat()#繼承父類
print(cat.legs)
#-------------------------
print(cat.color)
#--------------------------