Python 7天快速入門完整視頻教程:https://www.bilibili.com/video/BV1o84y1Z7J1
類的繼承
繼承是面向?qū)ο蟮娜筇卣髦?,也是?shí)現(xiàn)軟件復(fù)用的重要手段。Python 的繼承是多繼承機(jī)制,即一個(gè)子類可以同時(shí)有多個(gè)直接父類。 語法:
class 子類(父類1,父類2,...):
子類繼承父類的屬性和方法,同時(shí)子類可以擴(kuò)展新的屬性和方法。
我們來看一個(gè)實(shí)例:
# 定義一個(gè)水果類,作為父類
class Fruit:
# 父類屬性 口感
taste = None
# 父類方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
# 定義香蕉子類,繼承父類Food
class Banana(Fruit):
# 子類屬性 顏色
color = None
def say_color(self):
print(f"香蕉顏色:{self.color}")
b1 = Banana()
b1.taste = "果肉芳香"
b1.say_taste()
b1.color = "黃色"
b1.say_color()
運(yùn)行輸出:
口感:果肉芳香
香蕉顏色:黃色
多繼承實(shí)例:
# 定義一個(gè)水果類,作為父類
class Fruit:
# 父類屬性 口感
taste = None
# 父類方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
class Food:
# 父類屬性 價(jià)格
price = None
# 父類方法 打印價(jià)格
def say_price(self):
print(f"價(jià)格:{self.price}")
# 定義香蕉子類,繼承父類Food
class Banana(Fruit, Food):
# 子類屬性 顏色
color = None
def say_color(self):
print(f"香蕉顏色:{self.color}")
def __str__(self):
return f"口感:{self.taste},價(jià)格:{self.price},顏色:{self.color}"
b1 = Banana()
b1.taste = "果肉芳香"
b1.say_taste()
b1.color = "黃色"
b1.say_color()
b1.price = "10"
b1.say_price()
print(b1)
運(yùn)行輸出:
口感:果肉芳香
香蕉顏色:黃色
價(jià)格:10
口感:果肉芳香,價(jià)格:10,顏色:黃色
重寫父類屬性和方法
當(dāng)子類根據(jù)業(yè)務(wù)需求,對(duì)父類方法不滿意,我們可以在子類里重寫父類方法,當(dāng)然屬性也可以重寫。
# 定義一個(gè)水果類,作為父類
class Fruit:
# 父類屬性 口感
taste = None
# 父類方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
class Food:
# 父類屬性 價(jià)格
price = None
# 父類方法 打印價(jià)格
def say_price(self):
print(f"價(jià)格:{self.price}")
# 定義香蕉子類,繼承父類Food
class Banana(Fruit, Food):
# 子類屬性 顏色
color = None
# 重寫父類屬性
price = 9
def say_color(self):
print(f"香蕉顏色:{self.color}")
def __str__(self):
return f"口感:{self.taste},價(jià)格:{self.price},顏色:{self.color}"
# 重寫父類方法 打印價(jià)格
def say_price(self):
print(f"香蕉價(jià)格:{self.price}")
b1 = Banana()
b1.taste = "果肉芳香"
b1.say_taste()
b1.color = "黃色"
b1.say_color()
print(b1.price)
b1.price = "10"
b1.say_price()
print(b1)
運(yùn)行輸出:
口感:果肉芳香
香蕉顏色:黃色
9
香蕉價(jià)格:10
口感:果肉芳香,價(jià)格:10,顏色:黃色
我們self調(diào)用的是子類繼承下來的屬性和方法。如果我們想調(diào)用父類的屬性和方法,可以通過如下兩種方式:
方式一:父類名.父類屬性或者方法(self)
方式二:super().父類屬性或者方法()
# 定義一個(gè)水果類,作為父類
class Fruit:
# 父類屬性 口感
taste = None
# 父類方法 打印口感
def say_taste(self):
print(f"口感:{self.taste}")
class Food:
# 父類屬性 價(jià)格
price = 8
# 父類方法 打印價(jià)格
def say_price(self):
print(f"價(jià)格:{self.price}")
# 定義香蕉子類,繼承父類Food
class Banana(Fruit, Food):
# 子類屬性 顏色
color = None
# 重寫父類屬性
price = 9
def say_color(self):
print(f"香蕉顏色:{self.color}")
# 重寫父類方法 打印價(jià)格
def say_price(self):
print(f"父類屬性打?。簕super().price},{Food.price}")
# 父類方法調(diào)用
super().say_price()
Food.say_price(self)
print(f"香蕉價(jià)格:{self.price}")
b1 = Banana()
b1.say_price()
運(yùn)行效果:
父類屬性打?。?,8
價(jià)格:9
價(jià)格:9
香蕉價(jià)格:9