Почему MutableMapping не является экземпляром dict?

Я хотел бы создать объект, похожий на словарь, как рекомендовано -python">здесь. Вот мой пример:

import collections


class DictLike(collections.MutableMapping):
    def __init__(self, *args, **kwargs):
        self.store = dict()
        self.update(dict(*args, **kwargs))

    def __getitem__(self, key):
        return self.store[key]

    def __setitem__(self, key, value):
        self.store[key] = value

    def __delitem__(self, key):
        del self.store[key]

    def __iter__(self):
        return iter(self.store)

    def __len__(self):
        return len(self.store)


print(isinstance(dict(), collections.MutableMapping))
# >> True
print(isinstance(DictLike(), dict))
# >> False

По какой-то причине isinstance экземпляра моего класса DictLike равен False. Почему это так? Я ожидал, что наследование и реализация MutableMapping будут почти такими же, как обычный словарь.

Я считаю, что можно переопределить метод __instancecheck__, как описано здесь, но я не знаю, хорошая ли это идея и будет ли это питоническим способом?


person grundic    schedule 24.05.2017    source источник
comment
Наоборот: dict является подклассом MutableMapping.   -  person kindall    schedule 25.05.2017
comment
Не все изменяемые сопоставления являются словарями. Не имеет смысла наследовать MutableMapping от dict, не говоря уже о том, чтобы быть его экземпляром.   -  person user2357112 supports Monica    schedule 25.05.2017
comment
dict нет в __mro__ элемента MutableMapping.   -  person Willem Van Onsem    schedule 25.05.2017