问题只是如何重现这个:
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]
它似乎有效,但肯定应该有一种更干净的方法?
在表达中
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]