使用类属性访问字典

Naz*_*san 4 python dictionary

现在我正在使用python.关于dict的一个问题....假设我有一个字典

config = {'account_receivable': '4', 'account_payable': '5', 'account_cogs': '8', 'accoun
t_retained_earning': '9', 'account_income': '6', 'account_expense': '31', 'durat
ion': 2, 'financial_year_month': 9, 'financial_year_day': 15, 'account_cash': '3
', 'account_inventory': '2', 'account_accumulated_depriciation': '34', 'account_
depriciation_expense': '35', 'account_salary_expense': '30', 'account_payroll_pa
yable': '68', 'account_discount': '36', 'financial_year_close': '2008-08-08'}
Run Code Online (Sandbox Code Playgroud)

如果print - > config ['account_receivable']它将返回其对应的值4

但我希望通过这种方式访问​​它 - > config.account_receivable,然后它将返回相应的值

我怎么能实现这个??? 如果有人可以请帮助我

BR //纳兹穆尔

Ale*_*lli 12

为此,多年前,我发明了简单的Bunch成语; 一种简单的实现方式Bunch是:

class Bunch(object):
  def __init__(self, adict):
    self.__dict__.update(adict)
Run Code Online (Sandbox Code Playgroud)

如果config是一个字典,你不能使用config.account_receivable-这是绝对不可能的,因为字典不具有该属性,期.但是,你可以包装configBunch:

cb = Bunch(config)
Run Code Online (Sandbox Code Playgroud)

然后获取cb.config_account你内心的内容!

编辑:如果你想要的属性分配Bunch也影响到原来的dict(config在这种情况下),使得例如cb.foo = 23会做config['foo'] = 23,你需要一个性能稍微不同的实现Bunch:

class RwBunch(object):
  def __init__(self, adict):
    self.__dict__ = adict
Run Code Online (Sandbox Code Playgroud)

通常情况下,平原Bunch是首选,正是因为在实例化之后,Bunch实例和dict它被"准备"完全解耦 - 对它们中的任何一个的更改都不会影响另一个; 最常见的是这种脱钩是你想要的.

当你想要的"耦合"效应,然后RwBunch是让他们的方式:有了它,每个属性设置或实例上的缺失会本质上设置或从删除的项目dict,并且,反之亦然,从设置或删除项目dict的意愿本质上设置或删除实例中的属性.


sam*_*gar 7

您可以使用collections.namedtuple执行此操作:

from collections import namedtuple
config_object = namedtuple('ConfigClass', config.keys())(*config.values())
print config_object.account_receivable
Run Code Online (Sandbox Code Playgroud)

您可以在此处了解有关namedtuple的更多信息:

http://docs.python.org/dev/library/collections.html