我在用python实现borg时遇到问题。我在this question的答案中找到了一个例子,但它对我不起作用,除非我遗漏了什么。代码如下:
class Config:
"""
Borg singleton config object
"""
__we_are_one = {}
__myvalue = ""
def __init__(self):
#implement the borg pattern (we are one)
self.__dict__ = self.__we_are_one
self.__myvalue = ""
def myvalue(self, value=None):
if value:
self.__myvalue = value
return self.__myvalue
conf = Config()
conf.myvalue("Hello")
conf2 = Config()
print conf2.myvalue()
我想这是要打印“你好”,但对我来说它只是打印一个空行。你知道为什么吗?
结合删除
self.__myvalue = ""
和new-style Borg以及避免变量名中__
的建议,我们得到:问题似乎是init()正在将myvalue重置为空字符串。当我删除那一行时,我得到了预期的输出。
它看起来工作得太好了:-)
问题是,每当一个新的Borg被创建时,
__init__
中的赋值self.__myvalue = ""
总是会删除myvalue
的值。如果在测试中添加一些附加的打印语句,则可以看到这一点:去掉
self.__myvalue
就没事了。尽管如此,实现
myvalue()
有点奇怪。我想说,最好是让显式的getter和setter使用属性。您还需要__init__
中的一些代码来初始化myvalue
的值(如果它还不存在),或者至少处理它可能不存在于getter中。可能是这样的:相关问题 更多 >
编程相关推荐