Haoyu Bai schrieb:
> I know this is not a bug, but however it is an exception in the
> language, what Python trying to avoid.
> 
> Since all C function in extension module is treated as builtin function
> or method, the problem maybe bigger than it looks like. In the SWIG's
> case, it originally uses new.instancemethod to generate unbound method
> from the C function in DLL module. The code snippet looks like this:
> 
> 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)
> 
> Is there a corresponding way to do it in Python 3? A workaround I found is:
> 
> from types import MethodType
> class TestBase(object):
>     """Proxy of C++ TestBase class"""
>     def __init__(self, *args):
>         #some initialization code
>         ...
>         self.test = MethodType(_test.TestBase_test, self)
> 
> But this changed the original code structure so the migration would be
> more complicated. Is there any better way to get rid of it?


I've implemented a wrapper for your problem a while ago. It's in
Object/classobject.c:PyInstanceMethod_Type.

The wrapper is currently not available in Python code. But it's very
easy to make it public.

Christian

_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to