[Python-3000] Binding builtin function to class

Richard Boulton richard at tartarus.org
Mon Apr 28 10:42:33 CEST 2008


Terry Reedy wrote:
> | But in the case of builtin function, it can't work.
> 
> What is it that 'cannot work'?  My guess is that you are talking about the 
> fact that instances do not get bound as an argument to the first parameter 
> of a builtin.

Yes, this is what Haoyu was talking about - I suspect he meant "doesn't 
work" rather than "cannot work", and that's the reason it doesn't work 
(both in 2.x and 3.0).

> If *extension* function show a difference, perhaps SWIG needs revision for 
> 3.x.

SWIG does need an update for 3.0: this is precisely what Haoyu is 
working on! :)

I don't think this particular aspect of extension functions has changed 
in 3.0, as you say, but the problem Haoyu is trying to solve is working 
out what to replace usage of new.instancemethod with, as described in 
the code snippets at the end of his email.  SWIG currently generates 
code for python 2.x which makes heavy use of new.instancemethod, and 
since "new" is deprecated in 3.0, we need to find a replacement.

I'll ask a direct question: what is the recommended replacement for 
new.instancemethod?  In particular, what would be the recommended 
replacement for the following code snippet?

class TestBase(object):
     """Proxy of C++ TestBase class"""
     #some unrelated code omitted
     pass
#_test.TestBase_test is the C function in _test DLL module
TestBase.test = new.instancemethod(_test.TestBase_test,None,TestBase)


A secondary question is whether new.instancemethod was ever the right 
way for SWIG to be working: the person who originally wrote the python 
backend for SWIG isn't around any more, as far as I know, so we don't 
have knowledge of the reason that the code was written this way.

> [Builtin callables are also different in respect to parameter naming and 
> binding args by keyword.  Perhaps to reduce confusion, they should not be 
> named 'functions' in the manuals.]

That might be helpful for beginners, yes.

-- 
Richard


More information about the Python-3000 mailing list