Похоже, что это работает слишком хорошо: -)
Проблема заключается в том, что присваивание self.__myvalue = ""
в __init__
всегда будет забивать значение myvalue
каждый раз, когда создается новый Борг. Вы можете увидеть это, если добавите в тест некоторые дополнительные операторы печати:
conf = Config()
conf.myvalue("Hello")
print conf.myvalue() # prints Hello
conf2 = Config()
print conf.myvalue() # prints nothing
print conf2.myvalue() # prints nothing
Удалите self.__myvalue
и все будет хорошо.
Сказав это, реализация myvalue()
немного странная. Лучше, я бы сказал, иметь явные методы получения и установки с использованием свойств. Вы также захотите, чтобы некоторый код в __init__
инициализировал значение myvalue
, если он еще не существует, или, по крайней мере, обрабатывал, что он может не существовать в получателе. Возможно что-то вроде:
class Config(object):
"""
Borg singleton config object
"""
_we_are_one = {}
def __init__(self):
#implement the borg pattern (we are one)
self.__dict__ = self._we_are_one
def set_myvalue(self, val):
self._myvalue = val
def get_myvalue(self):
return getattr(self, '_myvalue', None)
myvalue = property(get_myvalue, set_myvalue)
c = Config()
print c.myvalue # prints None
c.myvalue = 5
print c.myvalue # prints 5
c2 = Config()
print c2.myvalue #prints 5