我无法让mypy与mixins一起正常工作:它一直抱怨我的mixins引用缺少的属性。考虑以下示例:
Future
如果我在此文件上运行mypy,则会收到错误消息:
class PrintValueMixin:
"""A mixin that displays values"""
def print_value(self) -> None:
print(self.value)
class Obj(PrintValueMixin):
"""An object that stores values. It needs a mixin to display its values"""
def __init__(self, value):
self.value = value
instance = Obj(1)
instance.print_value()
当然,它没有属性“值”。它是一个mixin,不应具有自己的属性!
那我如何让mypy理解这一点?
答案 0 :(得分:0)
我认为这是类层次结构设计不完善的标志。 Mixins不应依赖继承它们的类中的东西。我知道这是反对鸭子打字的,但是我们处于“静态”打字领域,规则在这里更加严格。
如果您想在不重构代码的情况下解决此问题,可以执行以下操作:
class PrintValueMixin:
"""A mixin that displays values"""
value: int # or whatever type it has
def print_value(self) -> None:
print(self.value)
现在,错误消失了。这是因为mypy将value
视为类属性。请注意,它尚未初始化-value
没有任何对象绑定到它。因此,这对运行时没有任何实际影响,并且您不会错误地使用它。