[英]Use union of arg types instead of supertype for generic variadic function
我有一個通用函數one_of
可以返回它的任何(變量)參數。 它的返回類型可能是它所有參數的超類型; 但是,我想用它們類型的聯合來注釋它的使用位置。
from typing import TypeVar
import random
T = TypeVar("T")
def one_of(*args: T) -> T:
return random.choice(args)
def int_or_str() -> int | str:
return one_of(1, "one")
這是 mypy 提供的錯誤:
vararg_type.py:11: error: Incompatible return value type (got "object", expected "Union[int, str]")
Found 1 error in 1 file (checked 1 source file)
我想我可以在它的每個調用站點上one_of
cast
返回值,但是還有另一種方法可以更好地使用類型檢查器嗎?
我不知道這是否“更好”,但 mypy 只使用object
因為它被選擇不默認為int | str
int | str
所以你可以告訴它使用int | str
int | str
只是暗示一個就足夠了
def int_or_str() -> int | str:
one: int | str = "one"
return one_of(1, one)
可能有一種更簡潔的書寫方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.