* Michael Rudolf:
Out of curiosity I tried this and it actually worked as expected:
>>> class T(object):
x=[]
foo=x.append
def f(self):
return self.x
>>> t=T()
>>> t.f()
[]
>>> T.foo(1)
>>> t.f()
[1]
>>>
At first I thought "hehe, always fun to play around with python. Might
be useful sometimes" - but then It really confused me what I did. I
mean: f is what we call a method, right? But was is foo?
foo is (refers to) an object that supports call notation and that forwards calls
somewhere else, in this case to append on a list.
You might call it (descriptive) a call forwarder, or (C# or general terminology)
a delegate, or (Python 2.x) a bound method.
<example>
>>> "Hello".upper
<built-in method upper of str object at 0x00BA16E0>
>>> f = "Hello".upper
>>> f
<built-in method upper of str object at 0x00BA16E0>
>>> f()
'HELLO'
>>>
>>>
>>>
>>> f.__self__
'Hello'
>>> f.__call__
<method-wrapper '__call__' of builtin_function_or_method object at 0x00BDD170>
>>> print( f.__doc__ )
S.upper() -> str
Return a copy of S converted to uppercase.
>>> _
</example>
A common use for delegates is as command handlers in a GUI application, and in
general for event notifications.
Cheers & hth.,
- Alf
--
http://mail.python.org/mailman/listinfo/python-list