在旧版 Python 中创建一个带有可变参数的 Typing.Annotated 实例

问题描述 投票:0回答:1

问题只是如何重现这个:

import typing

a = [1, 2, 3]
cls = typing.Annotated[int, *a]

甚至是这个:

import typing

cls1 = typing.Annotated[int, 1, 2, 3]
unann_cls = typing.get_args(cls1)[0]
metadata = cls1.__metadata__
cls2 = typing.Annotated[unann_cls, *metadata]

Python 3.9-3.10。

Annotated[int, *a]
是 <3.11 so
typing_extensions.Annotated
中的语法错误,在这里应该没有帮助。 “嵌套注释类型被展平”建议使用以下代码:

cls2 = unann_cls
for m in metadata:
    cls2 = typing.Annotated[cls2, m]

它似乎有效,但肯定应该有一种更干净的方法?

python python-typing
1个回答
2
投票

在表达中

obj[1, 2, 3]

1, 2, 3
只是一个元组文字。和

一模一样
x = 1, 2, 3
obj[x]

我们只是将元组

(1, 2, 3)
传递给
__getitem__

要获得您想要的行为,您可以用括号将元组文字括起来,以便在元组文字内启动序列解包的语法:

>>> typing.Annotated[(int, *a)]
typing.Annotated[int, 1, 2, 3]
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.