mk a écrit :
John Posner wrote:
a
False

I expected to see 'nostatget' output: nostat.__get__ = nostatget
obviously failed to replace this function's __get__ method.

I don't quite understand the above sentence, so I'm assuming that you wanted the final "is" test to be "True" instead of "False".

No. I should have described my goal in plain English in first place.

I wanted to replace nostat function's __get__ descriptor

A "descriptor" (shortcut for "object implementing the descriptor protocol) is an object that have a __get__ method - not the __get__ method itself. A function is a descriptor. The __get__ method of the function type is a method, and methods are not descriptors.

with a function that would allow me to peek inside it (i.e. into __get__ descriptor arguments)

=>  __get__(self, instance, cls=None)

When called as a result of a look up on an instance f of class Foo, nostat.__get__ will get (nostat, f, Foo) as args.

So no, I expected it to be false, that is, I expected to replace original descriptor with a "custom" descriptor.

s/descriptor/__get__/

Anyway: these types (function, method etc) are implemented in (higly optimized) C, and with a lot of restriction for both performance and sanity reasons. It's a case of practicality beats purity.

Another - perhaps more rewarding - exercise might be to implement a custom callable type that implements the descriptor protocol the same way the function do.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to