python 面向物件基礎梳理三 繼承、派生與組合
阿新 • • 發佈:2019-01-01
什麼是繼承
繼承是一種建立新類的方式,是一種什麼是什麼的關係,繼承的功能之一就是解決程式碼重用的問題,繼承是一種建立新類的方式,在python 中,新建的一個類可以繼承一個或者多個父類,父類由可以成為基類或者超類,新建的類稱為派生類或子類。
繼承的分類
繼承可以分為 單繼承和多繼承,Python 2 和 python 3 中有經典類和新式類的區分,這裡描述的是python3
示例演示
# 輸入 class Pare1class: pass class Pare2class: pass class Childclass(Pare1class):pass class Childclass2(Pare1class, Pare2class): print(Childclass.__bases__) print(Childclass2.__bases__) # 輸出 (<class '__main__.Pare1class'>,) (<class '__main__.Pare1class'>, <class '__main__.Pare2class'>)
如果沒有指定基類,python 會預設繼承 object 類,object 是所有Python 類的基類
# 輸入 print(Pare1class.__bases__) print(Pare2class.__bases__) # 輸出 (<class 'object'>,) (<class 'object'>,)
繼承與重用
在python 中編寫類的過程中,我們編寫了一個 類 A , 想要在編寫一個類B ,但類B 的大部分功能與 A類似,就用到了繼承了,通過繼承,B 類就會繼承 A類,實現A 類的功能
繼承示列演示,定義一個動物類 Animal,然後在定義兩個類Dog 和 Cat Dog 和Cat 繼承Animal 的所有特徵
class Animal:def __init__(self, name, aggressive, life_value): self.name = name self.aggressive = aggressive self.life_value = life_value def eat(self): print("%s is eating" % self.name) def sleep(self): print("%s is sleeping" % self.name) def attack(self, enemy): enemy.life_value -= self.aggressive class Dog(Animal): pass class Cat(Animal): pass d1 = Dog('snooppy', 40, 100) c1 = Cat('kitty', 30, 100) print(d1.life_value) # 100 c1.attack(d1) # c1 呼叫 attack print(d1.life_value) # 70 # 輸出 70
派生
當然子類也可以新增新的屬性或者在重新定義屬性,一旦子類重新定義了自己的屬性且與父類重名,那麼就以子類的為準了