【发布时间】:2019-08-08 03:23:58
【问题描述】:
我正在使用 mixin 将一系列功能分离到不同的类。这个 Mixin 只能与唯一的子类混合:
class Mixin:
def complex_operation(self):
return self.foo.capitalize()
class A(Mixin):
def __init__(self):
self.foo = 'foo'
在我的方法Mixin.complex_operation PyCharm 中给出警告“未解决的属性参考 foo”。
我是否正确使用了 mixin 模式? 有更好的方法吗?(我想在我的 mixin 中添加类型提示和自动补全功能,并且我想拥有多个 mixins。)
【问题讨论】:
-
我复制并粘贴了您的代码,
print (A().complex_operation())打印了“Foo”。我们应该看到更多代码吗?至于更好的方法,继承对于 mixins 来说很好,类型提示 + 自动补全完全取决于您选择的 IDE。 -
是的,它可以工作 - 但正如提到的 IDE 抱怨,我没有自动完成......
-
您使用的是哪个 IDE?它不应该评估函数中的变量,因为即使 Python 也不这样做——正是出于这个原因。
-
我正在使用 PyCharm。它确实会检查我是否使用了现有变量,但它当然可以让我执行代码,即使它怀疑它有问题。
-
我对 PyCharm 了解不多,但似乎它希望
self拥有foo,但Mixins 没有。它有一点——不是每个使用这个 mixin 的类都保证有一个foo。也许您希望foo成为Mixin的类属性(或至少在__init__中设置)而不是A。