您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:20:44 python 字数 2853 阅读 472 来源 www.jb51.cc/python

我想使用mixin为类提供一些功能.该功能使用一些额外的每对象状态.我想知道什么是最简洁的初始化本地状态的方法.考虑这个例子:class Mixin: items = [] def append(self, x): self.items.append(x) def display(self): prin

概述

我想使用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']

这里,状态是项目列表.在Mixin体中初始化它显然是错误的.通常情况下,我会在__init__中初始化它,但是对于Mixin,我不想弄乱__init__.

我可以做以下事情:

class Mixin:
    items = None

def append(self,x):
    if self.items is None:
        self.items = []
    self.items.append(x)

但是对每个附加物评估条件,它似乎不是最干净的解决方案.

任何替代品?或者可能在mixin中添加__init__是这样的?

(如果使用mixins是否可以,这是一个单独的问题)

有关:

> Initializing instance variables in Mixins for Ruby

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

我认为这是正确的做法;所有其他(可能正在工作)的解决方案看起来像是对我的黑客攻击.

总结

以上是编程之家为你收集整理的python – 在mixin中初始化实例变量全部内容,希望文章能够帮你解决python – 在mixin中初始化实例变量所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶