簡體   English   中英

如何在 Python 中定義通用協變 function?

[英]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 的屬性。 方差只適用於泛型; 泛型函數沒有這個屬性。 后者應該只使用沒有covariantcontravariant關鍵字 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM