He leído documentación de Python sobre las clases base abstractas:pitón @abstractmethod decorador
De here:
abc.abstractmethod(function)
Un decorador indicando métodos abstractos.El uso de este decorador requiere que la metaclase de la clase sea
ABCMeta
o se deriva de ella. No se puede crear una instancia de una clase que tenga una metaclase derivada deABCMeta
a menos que se anulen todos sus métodos abstractos y propiedades .
Y here
se puede aplicar el decorador
@abstractmethod
a métodos como draw() que debe ser implementada; Python generará una excepción para las clases que no definen el método. Tenga en cuenta que la excepción solo se genera cuando intenta crear una instancia de una subclase que carece del método.
He utilizado este código para probar que fuera:
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()
El código va bien, así que no lo entiendo. Si escribo c.abstractMethod
me sale:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
Lo que me falta aquí? ConcreteClass
debe implementar los métodos abstractos, pero no me sale ninguna excepción.
Qué Python? Informa el error simplemente bien para mí. Además, siempre puedes subir NotImplementedError en lugar de usar 'abc'. –
Publiqué un comentario sobre la respuesta de mouad, el enlace de 'python' se estableció como predeterminado en' python3'. Tendré en cuenta la excepción, ya que escribir código portátil con los cambios en Python parece estar muy lejos de mi conocimiento de Python. – Sebastian