python3 method create python abc abstract-methods

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 de ABCMeta no puede ABCMeta 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