赞
踩
我正在编写自己的容器,它需要通过属性调用来访问内部的字典。容器的典型用途如下: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块是否是一个好的实践,因此另一种方法是使用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")
或者使用其中一个,然后尝试这样的catch block: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")
哪一种选择是最性感和优雅的?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。