我想使用mixin为类提供一些功能。该功能使用一些附加的每对象状态。我想知道什么是初始化这个本地状态的最干净的方法。举个例子:
class Mixin:
items = []
def append(self, x):
self.items.append(x)
def display(self):
print self.items
class Foo(object, Mixin): pass
class Bar(object, Mixin): pass
foo = Foo()
foo.append('foo')
foo.display()
>>> ['foo']
bar = Bar()
bar.append('bar')
bar.display()
>>> ['foo', 'bar']
在这里,状态是items
列表。在Mixin体中初始化它显然是错误的。通常,我会在__init__
中初始化它,但是使用Mixin我不想搞乱__init__
。在
我可以做以下事情:
^{pr2}$但这种情况是在每个append
上进行评估的,它似乎不是最干净的解决方案。在
有其他选择吗?或者在mixin中添加__init__
是一种方法?在
(是否可以使用mixin是另一个问题)
相关:
最干净的解决方案是添加一个
__init__
方法,并在每个方法中使用super()
,以确保每个方法都被调用。在我建议把它放在Mixin的
__init__()
中。你认为缺点是什么?在我认为这是正确的方法;所有其他(可能有效的)解决方案对我来说都像是一个黑客。在
相关问题 更多 >
编程相关推荐