我有一个自定义的dict
子类,它类似于defaultdict,但将缺少的键传递给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})
我想像我项目的其他部分一样为这个类添加类型注释,但是我找不到任何这样做的例子。
我看到typing
模块使用外部类来添加注释。例如,defaultdict
将用定义为class typing.DefaultDict(collections.defaultdict, MutableMapping[KT, VT])
的typing.DefaultDict
进行注释
所以它是一个外部类,子类defaultdict
和泛型typing.MutableMapping
。
然而,我认为他们这样做可能是因为他们不想改变原来的collections.defaultdict
。我找到了Generic
和Mapping
的子类的例子,但没有从dict
这样的其他类继承的类
问题是:如何为这个类添加类型注释以使其成为泛型类? 我需要扩展其他东西还是为注释创建一个外部类
我使用的是python3.7.5,我更喜欢直接从dict
继承,因此我不必实现所需的方法,也不必考虑性能问题
提前谢谢
目前没有回答
相关问题 更多 >
编程相关推荐