假设我有对象有关键'dlist0',属性'row_id'我可以访问
getattr(dlist0,'row_id')
然后它返回值
但如果我有一本字典
ddict0 = {'row_id':4, 'name':'account_balance'}
getattr(ddict0,'row_id')
它不起作用
我的问题是如何以同样的方式访问ddict0和dlist0
任何人都可以帮助我?
答案 0 :(得分:6)
字典包含项目,因此使用定义为__getitem__()
的任何内容来检索密钥的值。
对象具有属性,因此使用__getattr__()
来检索属性的值。
理论上,如果你需要,理论上可以覆盖一个指向另一个 - 但你为什么需要?为什么不写一个辅助函数:
Python 2.x:
def get_value(some_thing, some_key):
if type(some_thing) in ('dict','tuple','list'):
return some_thing[some_key]
else:
return getattr(some_thing, some_key)
Python 3.x:
def get_value(some_thing, some_key):
if type(some_thing) in (dict,tuple,list):
return some_thing[some_key]
else:
return getattr(some_thing, some_key)
答案 1 :(得分:1)
或许namedtuple更适合您的目的
>>> from collections import namedtuple
>>> AccountBalance=namedtuple('account_balance','row_id name')
>>> ddict0=AccountBalance(**{'row_id':4, 'name':'account_balance'})
>>> getattr(ddict0,'row_id')
4
>>> ddict0._asdict()
{'row_id': 4, 'name': 'account_balance'}