属性呼び出しによって内部の辞書にアクセスできるようにする必要がある独自のコンテナーを作成しています。コンテナーの一般的な使用法は次のようになります。
dict_container = DictContainer()
dict_container['foo'] = bar
...
print dict_container.foo
このようなことを書くのはばかげているかもしれませんが、それが私が提供する必要がある機能です。これを次の方法で実装することを考えていました。
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"
ネストされた try/except ブロックが適切な方法かどうかはわかりません。そのため、別の方法として and を使用hasattr()
し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")
または、それらの 1 つと 1 つの try catch ブロックを次のように使用します。
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")
最も Pythonic でエレガントなオプションはどれですか?