class MethodDesc(object): #XXX: testing only def __init__(self, *args): self.args = args def __repr__(self): return 'MethodDesc(%r)' % (self.args,) class Base(object): _methods = {} @classmethod def described(cls, retval=None): def decorator(func): print func.__name__ print type(func) code = func.func_code args = zip(code.co_varnames[:code.co_argcount], func.func_defaults) cls._methods[func.__name__] = MethodDesc(args, retval) return func return decorator described = Base.described class Foo(Base): @described(retval=5) def foo(self, woof='foo'): return 1 print Foo._methods