method - python interface
python @abstractmethod decorator (1)
He leído documentos de Python sobre clases base abstractas:
Desde here
abc.abstractmethod(function)
Un decorador que indica métodos abstractos.El uso de este decorador requiere que la metaclase de la clase sea
ABCMeta
o se derive de ella. Una clase que tiene una metaclase derivada deABCMeta
no puedeABCMeta
una instancia a menos que todos sus métodos y propiedades abstractas estén anulados.
Y here
Puede aplicar el decorador
@abstractmethod
a métodos como draw () que deben implementarse; Python luego 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 usado este código para probarlo:
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 c.abstractMethod
obtengo:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
¿Qué me estoy perdiendo aquí? ConcreteClass
debe implementar los métodos abstractos, pero no tengo excepción.
¿Estás usando python3 para ejecutar ese código? Si es así, debes saber que la declaración de metaclase en python 3 tiene cambios , debes hacerlo así:
import abc
class AbstractClass(metaclass=abc.ABCMeta):
@abc.abstractmethod
def abstractMethod(self):
return