考虑以下示例。该示例是人为设计的,但在一个可运行的示例中说明了这一点:
class MultiplicatorMixin:
def multiply(self, m: int) -> int:
return self.value * m
class AdditionMixin:
def add(self, b: int) -> int:
return self.value + b
class MyClass(MultiplicatorMixin, AdditionMixin):
def __init__(self, value: int) -> None:
self.value = value
instance = MyClass(10)
print(instance.add(2))
print(instance.multiply(2))
执行时将给出以下输出:
12
20
该代码有效。
但是mypy
在上面运行,会产生以下错误:
example.py:4: error: "MultiplicatorMixin" has no attribute "value"
example.py:10: error: "AdditionMixin" has no attribute "value"
我明白为什么 mypy 会给出这个结果。但是 mixin 类从不单独使用。它们总是用作附加的超类。
对于上下文,这是一种已在现有应用程序中使用的模式,我正在添加类型提示。在这种情况下,错误是误报。我正在考虑使用 mixins 重写该部分,因为我不是特别喜欢它,并且可能通过重新组织类层次结构来完成相同的操作。
但我仍然想知道如何正确暗示这样的事情。