[英]How can I define a generic covariant function in Python?
我想定義一個 function example
,該示例采用Widget
類型的參數或任何擴展Widget
並返回與參數相同類型的參數。 因此,如果Button
擴展Widget
,則調用example(Button())
會返回Button
類型。
我嘗試了以下方法:
T_co = TypeVar('T_co', Widget, covariant=True)
def example(widget: T_co) -> T_co:
...
但是類型檢查器(Pyright)忽略了協方差。 經過進一步研究,我在PEP 484中發現了一條注釋:
注意:協變或逆變不是類型變量的屬性,而是使用此變量定義的通用 class 的屬性。 方差只適用於泛型; 泛型函數沒有這個屬性。 后者應該只使用沒有
covariant
或contravariant
關鍵字 arguments 的類型變量來定義。
但是,如果我嘗試在沒有注釋中指定的協變參數的情況下定義通用 function :
T_co = TypeVar('T_co', Widget)
def example(widget: T_co) -> T_co:
...
我只能將Widget
類型的值傳遞給 function (不是Button
)。
我怎樣才能做到這一點?
我能夠在MyPy 文檔中找到答案。 原來我在尋找bound
,而不是covariant
。 這可以這樣做:
T = TypeVar('T', bound=Widget)
def example(widget: T) -> T:
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.