Je suis en train d'écrire mon propre conteneur, qui doit donner accès à un dictionnaire à l'intérieur par l'attribut appels. L'utilisation typique du conteneur serait comme ceci:
temp_container = DictContainer()
dict_container['foo'] = bar
...
print dict_container.foo
Je sais que cela pourrait être stupide pour écrire quelque chose comme cela, mais c'est la fonctionnalité j'ai besoin de fournir. Je pensais à la mise en œuvre de ce de façon suivante:
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"
Je ne suis pas sûr de savoir si imbriqués les blocs try/except sont une bonne pratique, et donc une autre façon serait d'utiliser hasattr()
et 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")
Ou d'utiliser l'un d'eux et essayer un bloc catch comme ceci:
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")
L'option la plus pythonic et élégant?