1. 程式人生 > >python 面向物件基礎梳理三 繼承、派生與組合

python 面向物件基礎梳理三 繼承、派生與組合

什麼是繼承

繼承是一種建立新類的方式,是一種什麼是什麼的關係,繼承的功能之一就是解決程式碼重用的問題,繼承是一種建立新類的方式,在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

 派生

當然子類也可以新增新的屬性或者在重新定義屬性,一旦子類重新定義了自己的屬性且與父類重名,那麼就以子類的為準了