J'ai lu python documents sur les classes de base abstraites:
De ici :
abc.abstractmethod(function)
Un décorateur indiquant des méthodes abstraites.L'utilisation de ce décorateur nécessite que la métaclasse de la classe soit
ABCMeta
ou en soit dérivée. Une classe qui a une métaclasse dérivée deABCMeta
ne peut pas être instanciée à moins que toutes ses méthodes et propriétés abstraites ne soient remplacées.
Et ici
Vous pouvez appliquer le
@abstractmethod
décorateur de 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 déclenchée que lorsque vous essayez de créer une instance d'une sous-classe sans 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 va bien, donc je ne comprends pas. Si je tape c.abstractMethod
Je reçois:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
Qu'est-ce qui me manque ici? ConcreteClass
doit implémenter les méthodes abstraites, mais je n'ai aucune exception.
Utilisez-vous python3 pour exécuter ce code? si oui, vous devez savoir que déclarer la métaclasse dans python 3 avoir des modifications vous devriez le faire comme ceci à la place:
import abc
class AbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def abstractMethod(self):
return