gpt4 book ai didi

python - 在mixin中初始化实例变量

转载 作者:太空狗 更新时间:2023-10-29 21:53:16 24 4
gpt4 key购买 nike

我想使用 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 body中初始化它显然是错误的。通常,我会在 __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好不好用另当别论)

相关:

最佳答案

我建议将它放在 Mixin 的 __init__() 中。您认为缺点是什么?

class Mixin(object):
def __init__(self, *args, **kwargs):
super(Mixin, self).__init__(*args, **kwargs)
self.items = []

我认为这是正确的做法;所有其他(可能有效的)解决方案对我来说都像是黑客攻击。

关于python - 在mixin中初始化实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16731340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com