This list montre les méthodes dont vous avez besoin pour mettre en œuvre pour que votre classe soit "considérée" comme séquence: __getitem__
, __len__
, __contains__
, __iter__
, __reversed__
, index
et count
. Pourquoi cette implémentation minimale ne fonctionne-t-elle pas, c'est-à-dire pourquoi issubclass(S, Sequence) is False
?issubclass de classe de base abstraite Séquence
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 :-(
Existe-t-il une méthode supplémentaire que j'ai besoin d'implémenter? Ai-je mal compris les classes de base abstraites? Sous-classement Sequence
rend issubclass
retour True
bien sûr, mais cela ne va pas à l'idée derrière abc, n'est-ce pas?
Ce n'est pas parce qu'une classe implémente l'interface de séquence qu'elle en fait une sous-classe de Sequence. –
Je pense que OP le sait déjà. Voir [abc] (https://docs.python.org/2/library/abc.html#module-abc). – Vlad