ключ словаря Python против атрибута объекта - PullRequest
3 голосов
/ 19 июля 2010

предположим, у меня есть объект с ключом 'dlist0' с атрибутом 'row_id', к которому я могу получить доступ как

getattr(dlist0,'row_id')

тогда возвращаемое значение но если у меня есть словарь

ddict0 = {'row_id':4, 'name':'account_balance'}
getattr(ddict0,'row_id')

это не работа

мой вопрос, как я могу получить доступ к ddict0 и dlist0 таким же образом

Кто-нибудь может мне помочь?

Ответы [ 2 ]

6 голосов
/ 19 июля 2010

В словарях есть элементы, и поэтому для получения значения ключа используется все, что определено как __getitem__().

У объектов есть атрибуты, и поэтому для получения значения атрибута используется __getattr__().1005 *

Вы можете теоретически переопределить одно, чтобы указать на другое, если вам нужно - но зачем вам это нужно?Почему бы не написать вместо этого вспомогательную функцию:

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 голос
/ 19 июля 2010

Возможно, 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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...