在Python中,类型是第一类对象。 因此,我可以创建一个以类型为键的字典。 例如:
mydict = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
假设我的字典将填充任意类型作为键,我如何键入注释?
我已经尝试过:
mydict: dict[type, Any] = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
和:
mydict: dict[Type[Any], Any] = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
甚至:
mydict: dict[Any, Any] = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
但是
mypy
抱怨所有这些的分配。对以任何类型作为键的字典进行类型注释的正确方法是什么?
如果我只有某些类型,例如
int
和 str
,我可能可以将其注释为 dict[Union[Type[int], Type[str]]], Any]
,但由于我想支持 any 类型的键,所以这并不能解决问题。
如果没有类型注释,语法就可以正常工作,我什至可以从字典中检索特定值。例如:
mydict = {
int: "Hello!",
str: 12,
SomeClassName: "Hello again!"}
print(mydict[int])
...成功打印出来了
Hello!
如果重要的话,我正在使用 Python 3.9.6 和 mypy 0.812。
@Heike 非常好地给了我我的答案作为评论。 (谢谢!)
要对使用类型作为键的字典进行类型注释,请使用 Dict...而不是 dict:
mydict: Dict[type, Any]
...效果很好。 这是我犯的一个愚蠢的错误,源于我最初尝试输入注释 OrderedDict。 以相同的方式键入注释 OrderedDict:
mydict: OrderedDict[type, Any] = {int: "Something"}
...不起作用。 然而,在过去的 24 小时里,我已经阅读了足够多的有关 dict 的内容,同时试图发现我的错误,我还发现我曾尝试将 dict 分配给 OrderedDict,但这也不起作用。
谢谢 Heike 指出我明显的错误。