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

>>> @MyMethod
def 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

Reply via email to