Я давно пришел к тому же вопросу, а затем создал этот класс для использования во многих моих проектах:
class DotDict(dict):
"""
retrieve value of dict in dot style
"""
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError('has no attribute %s' % key)
def __setattr__(self, key, value):
self[key] = value
def __delattr__(self, key):
try:
del self[key]
except KeyError:
raise AttributeError(key)
def __str__(self):
return '<DotDict %s >' % self.__to_dict()
def __to_dict(self):
return dict(self)
Когда я хочу, чтобы объект хранил данные или хотел легко извлечь значение из dict, я всегда использую этот класс.
Кроме того, он может помочь мне сериализовать атрибуты, которые я установил в объекте, и, при необходимости, получить исходные данные.
Так что я думаю, что это может быть хорошим решением во многих ситуациях, хотя другие приемы выглядят простыми,
они не очень полезны в дальнейшем.