假设我有对象有钥匙“dlist0”与属性“ROW_ID”在我可以访问如Python字典键Vs的对象属性
getattr(dlist0,'row_id')
则返回值 但如果我有一本字典
ddict0 = {'row_id':4, 'name':'account_balance'}
getattr(ddict0,'row_id')
实在不行
我的问题是如何访问ddict0和dlist0同样的方式
任何人都可以帮助我?
假设我有对象有钥匙“dlist0”与属性“ROW_ID”在我可以访问如Python字典键Vs的对象属性
getattr(dlist0,'row_id')
则返回值 但如果我有一本字典
ddict0 = {'row_id':4, 'name':'account_balance'}
getattr(ddict0,'row_id')
实在不行
我的问题是如何访问ddict0和dlist0同样的方式
任何人都可以帮助我?
字典有项目,因此使用任何定义为__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)
也许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'}
:)是的,我有...'__getitem__'属性可以用于他们两个 – 2010-07-19 07:11:59