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