Ich habe Probleme bei der Implementierung eines Borg in Python. Ich habe ein Beispiel in einer Antwort auf this question gefunden, aber es funktioniert nicht für mich, es sei denn, ich vermisse etwas. Hier ist der Code:Python Borg Muster Problem
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()
Ich nehme an, dies bedeutet „Hallo“ zu drucken, aber für mich ist es druckt nur eine leere Zeile. Irgendwelche Ideen warum das sein könnte?
Warum verwenden Sie doppelte __ Namen für Ihre Attribute? Ein einzelnes führendes _ wird tun, um es "privat" zu machen. –
Nun, ich kopierte den Code von der anderen Frage, mit der ich verlinkt habe. Aber irgendwie dachte ich, dass ein einzelnes _ deutete an, dass es privat ist, während ein doppelt _ verursacht, dass ein Mangel an Namen, der ein noch stärkerer Hinweis ist, dass es * wirklich * privat ist, obwohl es immer noch zugegriffen werden kann, wenn der Benutzer bestimmt ist. – chrism1
Nein! Einzelne führende Unterstriche machen sie NICHT privat, sondern machen es so, dass Variablen auf Modulebene nicht in 'von foo import *' importiert werden. Ansonsten hat sie keinen anderen Effekt, als auf die Privatsphäre zu "hinweisen". –