खैर, सवाल शीर्षक में है: मैं अपरिवर्तनीय कुंजी के साथ एक पायथन शब्दकोश को परिभाषित कैसे करूं लेकिन परिवर्तनीय मानों को कैसे परिभाषित करूं?अपरिवर्तनीय कुंजी के साथ एक अजगर शब्दकोश परिभाषित करें लेकिन म्यूटेबल मान
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)
लेकिन यह मेरे (आश्चर्य) करने के लिए लग रहा है बल्कि लापरवाही: मैं इस के साथ आया था (अजगर 2.x में)। विशेष रूप से, क्या यह सुरक्षित है या वास्तव में कुछ कुंजी बदलने/जोड़ने का जोखिम है, क्योंकि मैं dict से विरासत में हूं? धन्यवाद।
ठीक है, कोई व्यक्ति संभवतः 'फिक्स्ड डिक्ट' के उदाहरण पर 'dict .__ setitem __()' को कॉल कर सकता है, नहीं? – cdhowie
आपको यह सुनिश्चित करने के लिए जांच करनी चाहिए कि 'dict.update' कॉल' __setitem__' - हालांकि, अगर यह भी करता है, तो मुझे यकीन नहीं है कि यह कार्यान्वयन निर्भर है या नहीं ... – mgilson
('अद्यतन' बाईपास '__setitem__') – katrielalex