सिर्फ एक शब्दकोश की कुंजी के रूप में विशेषता नामों का उपयोग क्यों न करें?
class StructMyDict(dict):
def __getattr__(self, name):
try:
return self[name]
except KeyError as e:
raise AttributeError(e)
def __setattr__(self, name, value):
self[name] = value
आप नामित तर्कों, ट्यूल की सूची या शब्दकोश, या व्यक्तिगत विशेषता असाइनमेंट, जैसे:
nautical = StructMyDict(left = "Port", right = "Starboard") # named args
nautical2 = StructMyDict({"left":"Port","right":"Starboard"}) # dictionary
nautical3 = StructMyDict([("left","Port"),("right","Starboard")]) # tuples list
nautical4 = StructMyDict() # fields TBD
nautical4.left = "Port"
nautical4.right = "Starboard"
for x in [nautical, nautical2, nautical3, nautical4]:
print "%s <--> %s" % (x.left,x.right)
वैकल्पिक रूप से, विशेषता त्रुटि को बढ़ाने के बजाय, आप अज्ञात मानों के लिए कोई भी वापस नहीं कर सकते। (Web2py स्टोरेज क्लास में इस्तेमाल की जाने वाली ट्रिक)
def __init__(self,**initial_data)
एक init विधि होने का अतिरिक्त लाभ मिलता है, जो कीवर्ड तर्क भी कर सकता है (उदाहरण के लिए "e = कर्मचारी (नाम = 'ऑस्कर')" या बस एक शब्दकोश में लें (उदाहरण के लिए "e = Employee () ** तानाशाह) ")।