问题只是如何重现这个:
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 中的语法错误,因此 typing_extensions.Annotated
在这里没有帮助。 “嵌套注释类型被扁平化”建议使用以下代码:
cls2 = unann_cls
for m in metadata:
cls2 = typing.Annotated[cls2, m]
它似乎有效,但肯定应该有一个更干净的方法?
最佳答案
在表达式中
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]
关于python - 在旧版 Python 中创建带有可变参数的 Typing.Annotated 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77275400/