[Python-3000] Unbound methods -- keep creating API?
Christian Heimes
lists at cheimes.de
Mon Nov 26 17:19:37 CET 2007
Greg Ewing wrote:
> This needs consideration. Pyrex currently makes use of
> this behaviour when defining a Python class having Pyrex
> functions as methods.
>
> However, a better solution for Pyrex would be to add
> method-binding behaviour to the C function object, so
> that C functions can be used directly as methods. The
> above example would then work simply by doing
>
> Example.id = id
A C function binder is very easy to implement. Here is a rough
implementation:
class binder:
def __init__(self, func):
self._func = func
def __get__(self, obj, type):
if obj:
return wrapper(self._func, obj)
else:
return self._func
def wrapper(func, obj):
def wrapped(*args, **kwargs):
return func(obj, *args, **kwargs)
return wrapped
class Example:
id = binder(id)
>>> Example.id
<built-in function id>
>>> Example().id()
138076828
>>> Example().id
<function wrapped at 0x83ac714>
More information about the Python-3000
mailing list