Ho una classe come:Come rendere dizionario di sola lettura in Python
class A:
def __init__(self):
self.data = {}
e ad un certo momento voglio vietare la modifica self.data
campi.
Ho letto in PEP-416 rejection notice che ci sono molti modi per farlo. Quindi mi piacerebbe trovare quello che sono.
ho provato questo:
a = A()
a.data = types.MappingProxyType(a.data)
che dovrebbe funzionare ma in primo luogo, la sua python3.3 + e in secondo luogo, quando faccio questo "divieto" più volte ho ottenere questo:
>>> a.data = types.MappingProxyType(a.data)
>>> a.data = types.MappingProxyType(a.data)
>>> a.data
mappingproxy(mappingproxy({}))
però sarebbe molto meglio ottenere solo mappingproxy({})
perché sto andando a "vietare" un sacco di volte. Il controllo di isinstance(MappingProxyType)
è un'opzione, ma penso che possano esistere altre opzioni.
Grazie
http://stackoverflow.com/questions/8752451/how-to-change-the-behavior -of-a-python-dictionarys-setattr può aiutarti – Garfield
Un'implementazione frozendict sembra piuttosto banale: https://github.com/slezica/python-frozendict/blob/master/frozendict/__init__.py – georg
@codelover Proprio così, Posso eseguire l'override di '__setitem__' con' throw NotImplemented'. È garantito che non ci sarà modo di modificare chiavi o valori tramite qualsiasi attributo 'dict' standard in qualsiasi implementazione Python? – sshilovsky