class baseclass(object): def __init__(self): print 'hey this is the base' def _deco(func): def wrapper(*arg): res = func(*arg) print 'I'm a decorator. This is fabulous, but that colour, so last season sweetiedarling' return res return wrapper @_deco def basefunc(self): print 'I'm a base function' @_deco def basefunc2(self): print "I'm another base function" #no more uses of _deco in this class _deco = staticmethod(_deco) # this is the key. it must be executed after all of the uses of _deco in # the base class. this way _deco is some sort weird internal function that # can be called from within the class namespace while said namespace is being # created and a proper static method for subclasses or external callers.class otherclass(baseclass): def __init__(self): super(otherclass, self).__init__() print 'other class' @baseclass._deco def meh(self): print 'I'm a function'



