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