This list показывает, какие методы необходимо реализовать для вашего класса, который будет «рассматривать» в виде последовательности: __getitem__
, __len__
, __contains__
, __iter__
, __reversed__
, index
и count
. Итак, почему эта минимальная реализация не работает, а именно, почему issubclass(S, Sequence) is False
?issubclass из последовательности абстрактного базового класса
from collections import *
class S(object):
def __getitem__(self, item):
raise IndexError
def __len__(self):
return 0
def __contains__(self, item):
return False
def __iter__(self):
return iter(())
def __reversed__(self):
return self
def index(self, item):
raise IndexError
def count(self, item):
return 0
issubclass(S, Iterable) # True :-)
issubclass(S, Sized) # True :-)
issubclass(S, Container) # True :-)
issubclass(S, Sequence) # False :-(
Есть ли дополнительный метод, который мне нужно реализовать, которого я пропустил? Я неправильно понял абстрактные базовые классы? Подклассификация Sequence
делает issubclass
return True
, конечно, но этот вид поражает идею abc, не так ли?
Просто потому, что класс реализует интерфейс последовательности, не делает его подклассом последовательности. –
Я думаю, что ОП уже это знает. См. [Abc] (https://docs.python.org/2/library/abc.html#module-abc). – Vlad