Не используйте UserDict
класс - он вам не нужен.Как говорят в документах, вы можете просто подкласс dict
напрямую.
Однако вам все еще нужен модуль UserDict
для DictMixin
:
Примечание: DictMixin
, хотя официально не устарело, было удалено в Python 3, и рекомендуется в документах, которые вы используете collections.MutableMapping
.Это, однако, имеет недостаток - вам нужно реализовать больше интерфейса словаря - __delitem__
, __getitem__
, __iter__
, __len__
и __setitem__
.С DictMixin
вы можете просто реализовать те, которые хотите изменить, а остальные используют реализацию по умолчанию.
from UserDict import DictMixin
class MyDict(DictMixin, dict):
def __setitem__(self, key, value):
print key, value # just an example
# use intern(key) or whatever here
dict.__setitem__(self, key, value) # or
# super(MyDict, self).__setitem__(key, value)
m = MyDict()
m['a'] = 'b'
# a b
m.update({'a': 'c'})
# a c
Она автоматически заставит update
использовать __setitem__
так, как вы хотите.