Nun, die Frage ist im Titel: Wie definiere ich ein Python-Wörterbuch mit unveränderlichen Schlüsseln, aber veränderbaren Werten? Ich kam mit dieser (in Python 2.x) auf:Definieren Sie ein Python-Wörterbuch mit unveränderbaren Schlüsseln, aber änderbaren Werten
class FixedDict(dict):
"""
A dictionary with a fixed set of keys
"""
def __init__(self, dictionary):
dict.__init__(self)
for key in dictionary.keys():
dict.__setitem__(self, key, dictionary[key])
def __setitem__(self, key, item):
if key not in self:
raise KeyError("The key '" +key+"' is not defined")
dict.__setitem__(self, key, item)
aber es scheint mir, (wenig überraschend) eher schlampig. Ist dies insbesondere sicher, oder besteht die Gefahr, dass einige Schlüssel tatsächlich geändert/hinzugefügt werden, da ich von dict geerbt habe? Danke.
Nun, jemand könnte vermutlich 'dict .__ stitem __()' auf einer Instanz von 'FixedDict' aufrufen, nein? – cdhowie
Sie sollten überprüfen, ob "dict.update" '__setitem__' aufruft - auch wenn dies der Fall ist, bin ich mir nicht sicher, ob dies implementierungsabhängig ist ... – mgilson
(' update' umgeht '__setitem__') – katrielalex