“泛型”和“多重繼承”屬于 Python 的語法規則。
1. 泛型(Generic[T])
通俗解釋
- 泛型允許你在定義類或函數時,不指定具體的類型,而是使用一個“占位符”(通常命名為 T)。
- 這就像你制作一個盒子,但盒子里可以放任何東西,只要這個東西符合某個約束條件(例如必須是某個類的實例)。
- 在使用這個類或函數的時候,你可以確定它返回的對象類型和傳入的類型是一致的(這里說一致只是建議一致,因為這種檢查主要是通過靜態類型檢查工具完成的,Python 在運行時不會自動強制這一點。),從而讓代碼更加安全、清晰。
數值舉例說明
假設你定義了一個泛型類,它能包裝任意數字(整數或浮點數),并且保證返回的值與輸入的類型一致:
from typing import Generic, TypeVar# 定義一個類型變量 T,表示“數字”的類型(這里沒有特別限制,但可以加約束)
T = TypeVar("T", int, float)class NumberBox(Generic[T]):def __init__(self, value: T):self.value = valuedef double(self) -> T:# 返回輸入數字的兩倍return self.value * 2# 創建一個包裝整數的 NumberBox
int_box = NumberBox(5)
print(int_box.double()) # 輸出 10# 創建一個包裝浮點數的 NumberBox
float_box = NumberBox(3.5)
print(float_box.double()) # 輸出 7.0
說明:
- 當你用整數(如 5)創建
NumberBox
時,T 自動被推導為int
,所以double()
方法返回整數 10。 - 當你用浮點數(如 3.5)創建
NumberBox
時,T 自動被推導為float
,返回 7.0。 - 泛型保證了無論你用哪種數字,方法返回的類型都和你包裝時的一致。
泛型是 Python 中類型提示的一部分,主要通過 typing
模塊中的 Generic
和 TypeVar
實現。它們是 Python 的語法規則之一,特別在靜態類型檢查工具(如 mypy)中發揮作用。
2. 多重繼承
通俗解釋
- 多重繼承允許一個類同時繼承自多個父類,從而同時獲得各個父類的屬性和方法。
- 這就像一個孩子可以同時繼承爸爸的優點和媽媽的特點,而不必只選擇一個來源。
數值舉例說明
假設你有兩個類,一個負責存儲數據格式驗證,一個負責日志記錄:
class DataValidator:def validate(self, data):# 簡單驗證,假設數據必須大于 0if data > 0:return Truereturn Falseclass Logger:def log(self, message):print(f"Log: {message}")# 多重繼承:同時繼承 DataValidator 和 Logger
class DataProcessor(DataValidator, Logger):def process(self, data):if self.validate(data):self.log(f"Processing data: {data}")return data * 2else:self.log("Invalid data!")return None# 使用示例
processor = DataProcessor()
result = processor.process(10) # 有效數據
print(result) # 輸出 20result = processor.process(-5) # 無效數據
print(result) # 輸出 None
說明:
DataProcessor
同時繼承了DataValidator
(數據驗證)和Logger
(日志記錄),因此它可以同時調用validate()
和log()
方法。- 數值例子中,我們處理數字 10 和 -5,前者經過驗證后返回 20,而后者因為驗證失敗返回
None
。
多重繼承是 Python 的核心語法之一。Python 允許一個類在定義時寫上多個父類,比如 class MyClass(A, B, C):
。這使得你可以組合多個類的功能,但也需要注意方法解析順序(MRO)的問題。
總結
-
泛型(Generic[T]):
- 讓類或函數在使用時保持類型一致性(例如上面 NumberBox 的例子)。
- 屬于 Python 類型提示系統的一部分,是 Python 的語法規則之一。
-
多重繼承:
- 允許一個類同時繼承多個父類,從而獲得多方面的功能(例如 DataProcessor 同時繼承 DataValidator 和 Logger)。
- 是 Python 核心語法的一部分,也是 Python 中常用的面向對象編程特性。