Я хотел бы создать объект, похожий на словарь, как рекомендовано -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__
, как описано здесь, но я не знаю, хорошая ли это идея и будет ли это питоническим способом?
dict
является подклассомMutableMapping
. - person kindall   schedule 25.05.2017MutableMapping
отdict
, не говоря уже о том, чтобы быть его экземпляром. - person user2357112 supports Monica   schedule 25.05.2017dict
нет в__mro__
элемента MutableMapping. - person Willem Van Onsem   schedule 25.05.2017