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

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

gre 演示 多個 面向對象 dcl tin 梳理 attack 創建

什麽是繼承

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

派生

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

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