J'ai lu la documentation Python sur les classes de base abstraites :
De ici :
abc.abstractmethod(fonction)
Un décorateur indiquant des méthodes abstraites.L'utilisation de ce décorateur nécessite que la métaclass de la classe soit
ABCMeta
ou en soit dérivée. Une classe ayant une métaclass dérivée deABCMeta
ne peut pas être instanciée à moins que toutes ses méthodes abstraites et propriétés soient redéfinies.
Et ici
Vous pouvez appliquer le décorateur
@abstractmethod
aux méthodes telles que draw() qui doivent être implémentées; Python lèvera alors une exception pour les classes qui ne définissent pas la méthode. Notez que l'exception n'est levée que lorsque vous essayez réellement de créer une instance d'une sous-classe qui manque de la méthode.
J'ai utilisé ce code pour tester cela :
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
Le code fonctionne bien, donc je ne comprends pas. Si je tape c.abstractMethod
j'obtiens :
>
Qu'est-ce que je rate ici ? ConcreteClass
doit implémenter les méthodes abstraites, mais je n'ai aucune exception.