問題はタイトルにあります:不変キーを持つが変更可能な値を持つPython辞書を定義するにはどうすればいいですか?私は、この(のpython 2.xで)を思い付いた:不変キーではあるが変更可能な値を持つPython辞書を定義する
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)
が、それは(当然ながら)私にはかなりずさんに見えます。特に、私はdictを継承しているので、これは安全か、実際にキーを変更/追加するリスクはありますか?おかげさまで
誰かがおそらく 'FixedDict'のインスタンスで' dict .__ setitem __() 'を呼び出すことができますか? – cdhowie
'dict.update'が' __setitem__'を呼び出すことを確認する必要があります - もしそれがあっても、それが実装依存かどうかわかりません... – mgilson
( 'update'は' __setitem__'をバイパスします。 ) – katrielalex