The trick of using super(self.__class__, self)... actually blows up for subclasses, because then self.__class__ is not longer the correct base class in the super chain (in fact it leads to an infinite recursion).  Turns it it suffices to attach __init__ and __call__ to the class after it has been created.  Adds a test to ensure that this works.