Python 变长泛型类型

Mat*_*ewj 2 python python-3.x python-typing

是否可以创建访问可变长度参数类型的泛型类型?

基本上,我正在尝试创建一个通用的 observable,用户可以在其中定义他们想要使用类型提示接受的参数。

前任:

Types = TypeVar("Types", var_length=True)

class Obserable(Generic[Types]):

    def subscribe(func: Callable[[Types], None]):
        ...

    def notify(*args: Types):
        ...

def callback(arg1: int, arg2: str, arg3: int) -> None:
    ...

observer: Observable[int, str, int] = Observable()
observer.subscribe(callback)
observer.notify(1, "hello", 5)
Run Code Online (Sandbox Code Playgroud)

Tha*_*ner 5

据我所知,没有但他们计划添加它正在努力

报价:

PEP 484 引入了 TypeVar,允许创建使用单一类型参数化的泛型。在这个 PEP 中,我们引入了 TypeVarTuple,允许使用任意数量的类型进行参数化——即可变参数类型变量,支持可变参数泛型。这使得各种用例成为可能。特别是,它允许使用数组形状参数化数值计算库(例如 NumPy 和 TensorFlow)中的类数组结构类型,从而使静态类型检查器能够捕获使用这些库的代码中与形状相关的错误。

  • 这已被接受为 [PEP646](https://peps.python.org/pep-0646/) 并计划用于 Python 3.11。对于 < 3.11,[`typing_extensions` 包](https://pypi.org/project/typing-extensions/) 提供向后移植。所以 TypeVarTuple 功能现在就可以使用了。 (2认同)