开发者

python dictionary key Vs object attribute

开发者 https://www.devze.com 2023-01-08 01:50 出处:网络
suppose i have object has key \'dlist0\' with attribute \'row_id\'the i can access as getattr(dlist0,\'row_id\')

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'}
0

精彩评论

暂无评论...
验证码 换一张
取 消