Saltar al contenido

Métodos abstractos en Python

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *