我想使用一个OrderedDict,其中键是一个枚举,并且该项是某个类.
我如何使用输入模块来暗示这一点?什么是这个暗示的namedtuple ::
Move = typing.NamedTuple('Move', [('actor', Actor), ('location', Location)])
Run Code Online (Sandbox Code Playgroud) 我有一个与defaultdictdict类似的自定义子类,但将缺少的键传递给它,以便它可以生成适当的值。default_factory
class KeyDefaultDict(dict):
__slots__ = ("default_factory",)
def __init__(self, default_factory, *args, **kwargs):
super().__init__(*args, **kwargs)
self.default_factory = default_factory
def __missing__(self, key):
if self.default_factory is None:
raise KeyError(key)
ret = self[key] = self.default_factory(key)
return ret
def __repr__(self):
return (
f"{type(self).__name__}({repr(self.default_factory)}, {super().__repr__()})"
)
d = KeyDefaultDict(int)
print(d["1"] + d["2"] + d["3"]) # out: 6
print(d) # out: KeyDefaultDict(<class 'int'>, {'1': 1, '2': 2, '3': 3})
Run Code Online (Sandbox Code Playgroud)
我想像项目的其余部分一样为此类添加类型注释,但我找不到任何有关如何执行此操作的示例。我看到该typing模块使用外部类来添加注释。例如,defaultdict将用typing.DefaultDict其定义为 进行注释class typing.DefaultDict(collections.defaultdict, MutableMapping[KT, VT])。
所以它是一个外部类,它是defaultdict …