Python ABC: регистрация по сравнению с разделением на подклассы

(Я использую python 2.7), документация Python указывает, что можно передать отображение на dict встроенное, и это скопирует то отображение в новый dict:

http://docs.python.org/library/stdtypes.html#mapping-types-dict

У меня есть класс, который реализует Отображающуюся ABC, но она перестала работать:

import collections
class Mapping(object):
    def __init__(self, dict={}): self.dict=dict
    def __iter__(self): return iter(self.dict)
    def __iter__(self): return iter(self.dict)
    def __len__(self): return len(self.dict)
    def __contains__(self, value): return value in self.dict
    def __getitem__(self, name): return self.dict[name]

m=Mapping({5:5})
dict(m)
# Traceback (most recent call last):
#   File "", line 1, in 
# TypeError: cannot convert dictionary update sequence element #0 to a sequence
collections.Mapping.register(Mapping)
dict(m)
# Traceback (most recent call last):
#   File "", line 1, in 
# TypeError: cannot convert dictionary update sequence element #0 to a sequence

Однако, если мой класс разделяет наборы на подклассы. Отображение затем его хорошо работает:

import collections
class Mapping(collections.Mapping):
    def __init__(self, dict={}): self.dict=dict
    def __iter__(self): return iter(self.dict)
    def __iter__(self): return iter(self.dict)
    def __len__(self): return len(self.dict)
    def __contains__(self, value): return value in self.dict
    def __getitem__(self, name): return self.dict[name]

m=Mapping({5:5})
dict(m)
# {5: 5}

Я думал, что смысл ABC должен был позволить регистрации работать то же разделяющий на подклассы (для isinstance и issubclass так или иначе). Таким образом, что произошло здесь?

5
задан Eric Snow 2 August 2010 в 22:39
поделиться