我想为使用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__
通常,我会在__init__
.
我可以执行以下操作:
class Mixin:
items = None
def append(self, x):
if self.items is None:
self.items = []
self.items.append(x)
但是对每个条件都进行了评估append
,它似乎不是最干净的解决方案。
有什么选择吗?或者也许添加__init__
到 mixin 是方法?
(如果使用 mixins 是否可以,这是一个单独的问题)
相关:
- 在 Mixins for Ruby中初始化实例变量