Öznitelik çağrıları ile içeride bir sözlüğe erişmesi gereken kendi kapsayıcımı yazıyorum. Kabın tipik kullanımı şöyle olacaktır:
dict_container = DictContainer()
dict_container['foo'] = bar
...
print dict_container.foo
Bunun gibi bir şey yazmanın aptalca olabileceğini biliyorum, ama sağlamam gereken işlevsellik bu. Bunu şu şekilde uygulamayı düşünüyordum:
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"
Yuvalanmış try / hariç blokların iyi bir uygulama olup olmadığından emin değilim, bu yüzden başka bir yol kullanmak hasattr()ve 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")
Veya bunlardan birini kullanmak ve biri böyle yakalamak için blok deneyin:
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")
Hangi seçenek en pitonik ve zariftir?
if 'foo' in dict_container:. Amin.