python 使用具有内部TypeVar的TypeVarTuple

eivnm1vs  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(149)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。Alexander Kondratskiy希望引起更多人对此问题的关注:如果可能的话,是否有一些间接的魔法可以从泛型类型的TypeVarTuple派生内部类型的TypeVarTuple。如果不可能的话,请给出解释,以及是否有任何PEP或对任何python类型检查器的增强可以在未来实现这一点。

在这个例子中,我应该如何使用TypeVarTuple?

T = TypeVar(“T”)
Ts = TypeVarTuple(“Ts”)

@dataclass
class S(Generic[T]):
    data: T

def data_from_s(*structs: ??) -> ??: 
    return tuple(x.data for x in structs)

a = data_from_s(S(1), S(“3”))  # is type tuple[int, str]
qojgxg4l

qojgxg4l1#

我不完全理解这个问题,但删除??解决了这个问题。

from dataclasses import dataclass
from typing import Generic, TypeVar, TypeVarTuple

T = TypeVar("T")
Ts = TypeVarTuple("Ts")

@dataclass
class S(Generic[T]):
    data: T

def data_from_s(*structs):
    return tuple(x.data for x in structs)

a = data_from_s(S(1), S("3"))  # is type tuple[int, str]

还是用T代替??

from dataclasses import dataclass
from typing import Generic, TypeVar, TypeVarTuple

T = TypeVar("T")
Ts = TypeVarTuple("Ts")

@dataclass
class S(Generic[T]):
    data: T

def data_from_s(*structs: T) -> T:
    return tuple(x.data for x in structs)

a = data_from_s(S(1), S("3"))  # is type tuple[int, str]

或类似的内容,如果添加--enable-incomplete-feature=TypeVarTuple参数并像mypy test.py --enable-incomplete-feature=TypeVarTuple那样调用它,则此示例不会有任何mypy问题

from dataclasses import dataclass
from typing import Generic, TypeVar, TypeVarTuple

T = TypeVar("T")
Ts = TypeVarTuple("Ts")

@dataclass
class S(Generic[T]):
    data: T

def data_from_s(*structs: S) -> tuple:
    return tuple(x.data for x in structs)

a = data_from_s(S(1), S("3"))

相关问题