from collections import *
class C(object):
def __iter__(self): pass
def __contains__(self, i): pass
def __len__(self): pass
def __getitem__(self, i): pass
issubclass(C, Mapping) => False
[issubclass(C, cls) for cls in Mapping.__mro__] => [False, True, True, True, True]
即。 C确实实现了Sized,Iterable和Container。
我原以为issubclass(C, Sized)
检查是否存在__len__
方法,issubclass(C, Mapping)
会检查每个直接超类所需的三种方法是否存在?
答案 0 :(得分:3)
collections.Mapping
是一个混合类,提供方法__contains__()
,keys()
,items()
,values()
,get()
,{{ 1}}和__eq__()
如果您提供方法__ne__()
,__len__()
和__iter__()
的定义。但是,为了实现这一点,您需要从__getitem__()
派生。
如果您不想从Mapping
派生,您也可以自己定义所有上述方法并使用
Mapping
使Mapping.register(C)
成真。