Abstract methods in Python [duplicate]
Before abc was introduced you would see this frequently.
class Base(object): def go(self): raise NotImplementedError("Please Implement this method")class Specialized(Base): def go(self): print "Consider me implemented"
Something along these lines, using ABC
import abcclass Shape(object): __metaclass__ = abc.ABCMeta def method_to_implement(self, input): """Method documentation""" return
Also read this good tutorial: http://www.doughellmann.com/PyMOTW/abc/
You can also check out zope.interface which was used prior to introduction of ABC in python.
See the abc module. Basically, you define
__metaclass__ = abc.ABCMeta on the class, then decorate each abstract method with
@abc.abstractmethod. Classes derived from this class cannot then be instantiated unless all abstract methods have been overridden.
If your class is already using a metaclass, derive it from
ABCMeta rather than
type and you can continue to use your own metaclass.
A cheap alternative (and the best practice before the
abc module was introduced) would be to have all your abstract methods just raise an exception (
NotImplementedError is a good one) so that classes derived from it would have to override that method to be useful.
abc solution is better because it keeps such classes from being instantiated at all (i.e., it "fails faster"), and also because you can provide a default or base implementation of each method that can be reached using the
super() function in derived classes.