簡體   English   中英

對通用可變參數函數使用 arg 類型的聯合而不是超類型

[英]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.

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