In Python this can be achieved by neutering a class:
import types
class Prototype:
class __metaclass__(type):
def __new__(self, name, bases, dict):
for member, value in dict.items():
if type(value) == types.FunctionType:
dict[member] = classmethod(value)
return type.__new__(self, name, bases, dict)
__new__ = NotImplemented
All methods are converted into classmethods, and the class can not be instantiated. Use of classmethod rather than staticmethod is crucial: When classmethod is used, the method is passed the class as the first argument (much like an instance is passed "self"). This means a method defined in a superclass can call other methods which have possibly been customized in sub-classes.
One trick here: When invoking a super-class's overridden method from a sub-class, one must call Superclass.function.im_func(self, other arguments).