Обязательно ли основывать это на диктовке?
Да, если вы хотите обрабатывать его как список предметов, не злоупотребляя __dict__
.
Ниже приводится мой старый ответ на вопрос о Маше.Он обеспечивает значение по умолчанию, по умолчанию это может быть метод или объект, если это объект, он будет клонироваться глубоко ( не просто горячая ссылка), если он используется более одного раза.
Ион выставляет свои простые значения ключей как .key
:
def Map(*args, **kwargs):
value = kwargs.get('_default', None)
if kwargs.has_key('_default'): del kwargs['_default']
# CONSIDER You may want to look at the collections.defaultdict class.
# It takes in a factory function for default values.
#
# You can also implement your class by overriding the __missing__ method
# of the dict class, rather than overriding the __getitem__.
#
# Both were added in Python 2.5 according to the documentation.
class _DefMap(dict):
'But CONSIDER http://pypi.python.org/pypi/bunch/1.0.0 '
def __init__(self, *a, **kw):
dict.__init__(self, *a, **kw)
self.__dict__ = self
def __getitem__(self, key):
if not self.has_key(key):
if hasattr(value, '__call__'):
self[key] = value(key)
else:
self[key] = copy.deepcopy(value)
return dict.__getitem__(self, key)
return _DefMap(*args, **kwargs)