Для этой цели много лет назад я изобрел простую идиому Bunch
; Один простой способ реализовать Bunch
это:
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
Если config
является диктом, вы не можете использовать config.account_receivable
- это абсолютно невозможно, потому что у диктанта нет этого атрибута, точка. Тем не менее, вы можете обернуть config
в Bunch
:
cb = Bunch(config)
, а затем получите доступ к cb.config_account
к своему сердцу!
Редактировать : если вы хотите, чтобы присвоение атрибута на Bunch
также влияло на оригинал dict
(config
в данном случае), например, например. cb.foo = 23
сделает config['foo'] = 23
, вам нужна немного другая реализация Bunch
:
class RwBunch(object):
def __init__(self, adict):
self.__dict__ = adict
Обычно предпочитается простой Bunch
, в точности , потому что , после создания экземпляра, экземпляр Bunch
и dict
, из которого он был «заполнен», полностью отделены - изменяется на любой из они не влияют на других; и такое разделение, чаще всего, и является желательным.
Когда вы делаете хотите «связать» эффекты, тогда RwBunch
- это способ их получить: с его помощью каждый параметр или удаление атрибута по своей сути будет устанавливать или удалять элемент из dict
, и, наоборот, установка или удаление элементов из dict
по своей природе устанавливает или удаляет атрибуты из экземпляра.