Ich schreibe meinen eigenen Container, der durch Attributaufrufe Zugriff auf ein Wörterbuch im Inneren gewähren muss. Die typische Verwendung des Behälters wäre wie folgt:
dict_container = DictContainer()
dict_container['foo'] = bar
...
print dict_container.foo
Ich weiß, dass es vielleicht dumm ist, so etwas zu schreiben, aber das ist die Funktionalität, die ich bereitstellen muss. Ich habe darüber nachgedacht, dies folgendermaßen umzusetzen:
def __getattribute__(self, item):
try:
return object.__getattribute__(item)
except AttributeError:
try:
return self.dict[item]
except KeyError:
print "The object doesn't have such attribute"
Ich bin nicht sicher , ob verschachtelter try / except Blöcke sind eine gute Praxis , so eine andere Art und Weise zu verwenden wäre hasattr()und has_key():
def __getattribute__(self, item):
if hasattr(self, item):
return object.__getattribute__(item)
else:
if self.dict.has_key(item):
return self.dict[item]
else:
raise AttributeError("some customised error")
Oder um einen von ihnen zu verwenden und einen Catch-Block wie folgt zu versuchen:
def __getattribute__(self, item):
if hasattr(self, item):
return object.__getattribute__(item)
else:
try:
return self.dict[item]
except KeyError:
raise AttributeError("some customised error")
Welche Option ist am pythonischsten und elegantesten?
if 'foo' in dict_container:. Amen.