Sto cercando di utilizzare il decoratore @property
di Python su un dettato in una classe. L'idea è che voglio che un determinato valore (chiamiamolo 'messaggio') venga cancellato dopo l'accesso. Ma voglio anche un altro valore (chiamiamolo 'last_message') per contenere l'ultimo messaggio impostato, e tenerlo fino a quando non viene impostato un altro messaggio. Nella mia mente, questo codice dovrebbe funzionare:Utilizzo di decorator @property in 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"]
...
>>>
Tuttavia, non sembra:
>>> a = A()
>>> a.b["message"] = "hello"
>>> a.b["message"]
''
>>> a.b["last_message"]
''
>>>
Non sono sicuro di quello che ho fatto di male? Mi sembra che lo @property
non funzioni come mi aspetterei che su dicts, ma forse sto facendo qualcosa di fondamentalmente sbagliato?
Inoltre, so che potrei semplicemente utilizzare i singoli valori nella classe. Ma questo è implementato come una sessione in un'applicazione web e ho bisogno che sia un dittico. Potrei fare questo lavoro, o fare in modo che l'intera sessione si opponga a fingere che sia un dittico, o usare le singole variabili e modificarlo per renderlo funzionante per tutto il resto della base di codice. Preferirei semplicemente farlo funzionare.
dovresti inserire la tua risposta in una nuova _ (auto-) risposta_ invece di modificare nella tua _question_ –
btw, invece di un normale "dict" potresti essere interessato all'utilizzo di ['__slots__ = ['messaggio', 'last_message '] '] (https://docs.python.org/2/reference/datamodel.html?highlight=slots#__slots__) se questi sono gli unici due (fissi) tasti. Oppure modifica un 'collections.namedtuple' –