Sebastian Sebastian - 3 months ago 31
Python Question

python @abstractmethod decorator

I have read python docs about abstract base classes:

From here:


A decorator indicating abstract methods.

Using this decorator requires that the class’s metaclass is
is derived from it. A class that has a metaclass derived from

cannot be instantiated unless all of its abstract methods and
properties are overridden.

And here

You can apply the
decorator to methods such as draw()
that must be implemented; Python will then raise an exception for
classes that don’t define the method. Note that the exception is only
raised when you actually try to create an instance of a subclass
lacking the method.

I've used this code to test that out:

import abc

class AbstractClass(object):
__metaclass__ = abc.ABCMeta

def abstractMethod(self):

class ConcreteClass(AbstractClass):
def __init__(self): = "me"

c = ConcreteClass()

The code goes fine, so I don't get it. If I type
I get:

<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>

What I'm missing here?
must implement the abstract methods, but I get no exception.


Are you using python3 to run that code ? if yes you should know that declaring metaclass in python 3 have changes you should do it like this instead:

import abc

class AbstractClass(metaclass=abc.ABCMeta):

  def abstractMethod(self):