Dynamic class methods misunderstanding
Christos TZOTZIOY Georgiou
tzot at sil-tec.gr
Mon Jan 31 06:01:42 EST 2005
On Sat, 29 Jan 2005 10:24:27 +0100, rumours say that aleaxit at yahoo.com
(Alex Martelli) might have written:
>Bill Mill <bill.mill at gmail.com> wrote:
> ...
>> > class Test:
>> > def __init__(self, method):
>> > self.m = new.instancemethod(method, self, Test)
>>
>> Beautiful! thank you very much. Looking into the "new" module in
>> python 2.4, that's equivalent to:
>>
>> self.m = type(self.__init__)(method, self, Test)
>Another approach with the same result is to exploit the fact that a
>function is a descriptor:
>
>self.m = method.__get__(self, Test)
Almost true; not all builtin functions are descriptors though.
.>> import new
.>> f= new.instancemethod(divmod, 7, object)
.>> map(f, range(1,10,2))
[(7, 0), (2, 1), (1, 2), (1, 0), (0, 7)]
.>> f= divmod.__get__(7)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in -toplevel-
f= divmod.__get__(7)
AttributeError: 'builtin_function_or_method' object has no attribute
'__get__'
I didn't run an extensive test, but it's possible that all builtin
functions are not descriptors.
--
TZOTZIOY, I speak England very best.
"Be strict when sending and tolerant when receiving." (from RFC1958)
I really should keep that in mind when talking with people, actually...
More information about the Python-list
mailing list