Estoy tratando de usar el decorador de Python @property
en un dict en una clase. La idea es que quiero que se borre cierto valor (llámalo 'mensaje') después de que se acceda a él. Pero también quiero otro valor (llámalo 'last_message') para contener el último mensaje configurado y mantenlo hasta que se establezca otro mensaje. En mi mente, el código funcionaría:Usando @property decorator en los 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"]
...
>>>
Sin embargo, no parece:
>>> a = A()
>>> a.b["message"] = "hello"
>>> a.b["message"]
''
>>> a.b["last_message"]
''
>>>
No estoy seguro de lo que he hecho mal? Me parece que @property
no funciona como lo esperaría en los dicts, pero ¿tal vez estoy haciendo algo más fundamentalmente erróneo?
Además, sé que podría usar valores individuales en la clase. Pero esto se implementa como una sesión en una aplicación web y necesito que sea un dict. Podría hacer que esto funcione o hacer que todo el objeto de la sesión pretenda ser un dict, o usar variables individuales y modificarlas para que funcionen en el resto de la base de código. Prefiero simplemente hacer que esto funcione.
debe poner su respuesta en una _ _respuesta_automática_ en vez de en su _question_ –
btw, en lugar de un 'dict' normal que podría interesarle usar [' __slots__ = ['message', 'last_message '] '] (https://docs.python.org/2/reference/datamodel.html?highlight=slots#__slots__) si esas son las únicas dos claves (fijas). O bien, modifique 'collections.namedtuple' –