mk wrote:
Hello everyone,I rewrote an example someone posted here recently from: >>> def print_method_name(method): def new_meth(*args, **kwargs): print method.func_name return method(*args, **kwargs) return new_meth >>> @print_method_name def f2(): pass >>> f2() f2 ..to: >>> class MyMethod(object): def __init__(self, func): self.name = func.func_name self.func = func def __call__(self): print self.name return self.func>>> @MyMethoddef f(): pass >>> f() f <function f at 0x017CDA70>Note that function decorator returned None, while class decorator returned function.
To repeat and expand a bit what I said to the OP: these are both callables (functions in the math sense) because they both of instances of a class with a .__call__ instance method. Both are used as function decorators. One is an instance of class 'function', the other an instance of class 'MyMethod'. The class difference is not relevant to the usage. This is duck typing in action.
A class decorator is a callable (in 2.6+/3.0+) that decorates a class. tjr -- http://mail.python.org/mailman/listinfo/python-list
