2
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)の存在をチェックするのと同じように、各直下のスーパークラスに必要な 3 つのメソッドの存在をチェックすると予想していたでしょうか?__len__issubclass(C, Mapping)

4

1 に答える 1

3

collections.Mapping__contains__()は、メソッド、keys()items()values()を提供する mix-in クラスであり、メソッドの定義を提供する場合はget()__eq__()および. ただし、これを機能させるには、から派生させる必要があります。__ne__()__len__()__iter__()__getitem__()Mapping

から派生させたくない場合Mappingは、上記のすべてのメソッドを自分で定義して使用することもできます

Mapping.register(C)

実現するissubclass(C, Mapping)

于 2012-05-30T18:45:47.313 に答える