Posterior a consultar especialistas en el tema, programadores de diversas ramas y profesores hemos dado con la solución al problema y la compartimos en esta publicación.
Solución:
Antes de que se introdujera abc, vería esto con frecuencia.
class Base(object):
def go(self):
raise NotImplementedError("Please Implement this method")
class Specialized(Base):
def go(self):
print "Consider me implemented"
Algo así, usando ABC
import abc
class Shape(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def method_to_implement(self, input):
"""Method documentation"""
return
Lea también este buen tutorial: http://www.doughellmann.com/PyMOTW/abc/
También puedes consultar zope.interfaz que se utilizó antes de la introducción de ABC en python.
- http://pypi.python.org/pypi/zope.interfaz
- http://wiki.zope.org/Interfaces/FrontPage
Ver el módulo abc. Básicamente, usted define __metaclass__ = abc.ABCMeta
en la clase, luego decora cada método abstracto con @abc.abstractmethod
. Las clases derivadas de esta clase no se pueden instanciar a menos que se hayan invalidado todos los métodos abstractos.
Si su clase ya está usando una metaclase, derivarla de ABCMeta
más bien que type
y puede continuar usando su propia metaclase.
Una alternativa barata (y la mejor práctica antes de la abc
se introdujo el módulo) sería hacer que todos sus métodos abstractos solo generen una excepción (NotImplementedError
es bueno) por lo que las clases derivadas de él tendrían que anular ese método para ser útil.
sin embargo, el abc
La solución es mejor porque evita que se creen instancias de tales clases (es decir, “falla más rápido”), y también porque puede proporcionar una implementación predeterminada o base de cada método al que se puede llegar usando el super()
función en clases derivadas.
Si sostienes alguna perplejidad o disposición de regenerar nuestro escrito te insinuamos realizar una observación y con placer lo interpretaremos.