Saya sedang menulis wadah saya sendiri, yang perlu memberikan akses ke kamus di dalam oleh panggilan atribut. Penggunaan khas wadah akan seperti ini:
dict_container = DictContainer()
dict_container['foo'] = bar
...
print dict_container.foo
Saya tahu mungkin bodoh menulis sesuatu seperti ini, tapi itulah fungsi yang harus saya sediakan. Saya sedang berpikir untuk mengimplementasikan ini dengan cara berikut:
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"
Saya tidak yakin apakah percobaan bersarang / kecuali blok adalah praktik yang baik sehingga cara lain adalah dengan menggunakan hasattr()dan 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")
Atau untuk menggunakan salah satunya dan satu coba tangkap blok seperti ini:
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")
Opsi mana yang paling pythonic dan elegan?
if 'foo' in dict_container:. Amin.