suppose i have object has key 'dlist0' with attribute 'row_id' the i can access as
getattr(dlist0,'row_id')
then it return value but if i have a dictionary
ddict0 = {'row_id':4, 'name':'account_balance'}
getattr(ddict0,'row_id')
it is not work
my question is how can i a开发者_如何学JAVAccess ddict0 and dlist0 same way
any one can help me?
Dictionaries have items, and thus use whatever is defined as __getitem__()
to retrieve the value of a key.
Objects have attributes, and thus use __getattr__()
to retrieve the value of an attribute.
You can theoretically override one to point at the other, if you need to - but why do you need to? Why not just write a helper function instead:
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)
Perhaps a namedtuple is more suitable for your purpose
>>> 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'}
精彩评论