Ich versuche, Python @property
Dekorator auf ein Dict in einer Klasse zu verwenden. Die Idee ist, dass ich einen bestimmten Wert (nennen Sie es "Nachricht") nach dem Zugriff gelöscht werden soll. Aber ich möchte auch einen anderen Wert (nennen Sie es "Last_message"), um die letzte Nachricht zu enthalten, und behalten Sie es, bis eine andere Nachricht gesetzt ist. In meinem Kopf, würde dieser Code funktionieren:Using @property Decorator auf dicts
>>> class A(object):
... def __init__(self):
... self._b = {"message": "",
... "last_message": ""}
... @property
... def b(self):
... b = self._b
... self._b["message"] = ""
... return b
... @b.setter
... def b(self, value):
... self._b = value
... self._b["last_message"] = value["message"]
...
>>>
Allerdings scheint es nicht zu:
>>> a = A()
>>> a.b["message"] = "hello"
>>> a.b["message"]
''
>>> a.b["last_message"]
''
>>>
bin ich nicht sicher, was ich falsch gemacht habe? Es scheint mir wie @property
funktioniert nicht, wie ich es auf dicts erwarten würde, aber vielleicht mache ich etwas anderes grundsätzlich falsch?
Außerdem weiß ich, dass ich einfach einzelne Werte in der Klasse verwenden könnte. Aber das ist als eine Sitzung in einer Webanwendung implementiert und ich brauche es ein Diktat. Ich könnte entweder diese Arbeit machen, oder das ganze Session-Objekt dazu bringen, so zu tun, als ob es ein Diktat wäre, oder einzelne Variablen benutzen und es in den Rest der Code-Basis einarbeiten. Ich würde viel lieber nur das zur Arbeit bringen.
sollten Sie Ihre Antwort in eine neue _ (Selbst-) Antwort anstatt in Ihre _question_ –
BTW, anstelle von einem regulären "dict" Sie könnten daran interessiert sein, ['__slots__ = ['Nachricht', 'last_message '] '] (https://docs.python.org/2/reference/datamodel.html?highlight=slots#__slots__), wenn dies die einzigen zwei (festen) Schlüssel sind. Oder ändern Sie ein 'collections.namedtuple' –