我已经创建了一个类似字典的自定义类,以简化在大型数据集上合并评估指标的过程。该类实现了一个
以下是我正在处理的代码的简化版本:
程序的最后一行导致了mypy (0.782)出现以下错误:
我能理解这个错误。
当我把
是否有人能够指导我如何注释父类的
(我正在使用Python 3.8.3)
__add__
方法来汇总各种指标。以下是我正在处理的代码的简化版本:
from __future__ import annotations
from typing import TypeVar, Dict
T = TypeVar('T', int, float)
class AddableDict(Dict[str, T]):
def __add__(self, other: AddableDict[T]) -> AddableDict[T]:
if not isinstance(other, self.__class__):
raise ValueError()
new_dict = self.__class__()
all_keys = set(list(self.keys()) + list(other.keys()))
for key in all_keys:
new_dict[key] = self.get(key, 0) + other.get(key, 0)
return new_dict
# AddableIntDict = AddableDict[int]
# this would work just fine, however I need to add a few additional methods
class AddableIntDict(AddableDict[int]):
def some_int_specific_method(self) -> None:
pass
def main() -> None:
x = AddableIntDict()
y = AddableIntDict()
x['a'] = 1
y['a'] = 3
x += y # breaks mypy
程序的最后一行导致了mypy (0.782)出现以下错误:
error: Incompatible types in assignment (expression has type "AddableDict[int]", variable has type "AddableIntDict")
。我能理解这个错误。
当我把
AddableIntDict
定义为AddableDict[int]
类型别名时,代码可以正常工作,如我的注释所示。但是,由于我需要根据字典值的类型添加其他方法,如some_int_specific_method
所示,因此我不能简单地使用类型别名。是否有人能够指导我如何注释父类的
__add__
方法,以便它将返回调用类的类型呢?(我正在使用Python 3.8.3)
all_keys = set(list(self.keys()) + list(other.keys()))
可以简化为all_keys = self.keys() | other.keys()
,因为字典的键视图对象已经实现了类似集合的操作。 - juanpa.arrivillagacollections.Counter
。 - juanpa.arrivillagaCounter
。我正在实现的类引入了更复杂的逻辑,尽管它可能可以重写为使用Counter
。 - tingled