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