【发布时间】:2023-03-14 08:29:01
【问题描述】:
我想为使用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__ 混淆。
我可以做到以下几点:
class Mixin:
items = None
def append(self, x):
if self.items is None:
self.items = []
self.items.append(x)
但条件是在每个append 上评估的,它似乎不是最干净的解决方案。
还有其他选择吗?或者也许将__init__ 添加到mixin 中是这样的?
(是否使用 mixins 是一个单独的问题)
相关:
【问题讨论】:
标签: python