Re: no unbound methods in py3k
Christian Heimes schrieb: Thomas Heller wrote: but this is very ugly, imo. Is there another way? The raw_func instances that I have are not descriptors (they do not implement a __get__() method...) I've written PyInstanceMethod_Type for this use case. It's not (yet) available for Python code. Barry hasn't decided whether he should expose the type so late in the release cycle or not. See http://bugs.python.org/issue3787 and http://docs.python.org/dev/3.0/c-api/method.html?highlight=pyinstancemethod#PyInstanceMethod_Type Ok, so one has to write an extension to access or expose it. Oh, wait - there's ctypes: Python 3.0rc1 (r30rc1:66507, Sep 18 2008, 14:47:08) [MSC v.1500 32 bit (Intel)] on win32 Type help, copyright, credits or license for more information. from ctypes import * pythonapi.PyInstanceMethod_New.restype = py_object pythonapi.PyInstanceMethod_New.argtypes = [py_object] instancemethod = pythonapi.PyInstanceMethod_New class Example: ... pass ... Example.id = instancemethod(id) x = Example() x.id() 12597296 id(x) 12597296 Thomas -- http://mail.python.org/mailman/listinfo/python-list
Re: no unbound methods in py3k
Thomas Heller wrote: Christian Heimes schrieb: Thomas Heller wrote: but this is very ugly, imo. Is there another way? The raw_func instances that I have are not descriptors (they do not implement a __get__() method...) I've written PyInstanceMethod_Type for this use case. It's not (yet) available for Python code. Barry hasn't decided whether he should expose the type so late in the release cycle or not. See http://bugs.python.org/issue3787 and http://docs.python.org/dev/3.0/c-api/method.html?highlight=pyinstancemethod#PyInstanceMethod_Type Ok, so one has to write an extension to access or expose it. Oh, wait - there's ctypes: Python 3.0rc1 (r30rc1:66507, Sep 18 2008, 14:47:08) [MSC v.1500 32 bit (Intel)] on win32 Type help, copyright, credits or license for more information. from ctypes import * pythonapi.PyInstanceMethod_New.restype = py_object pythonapi.PyInstanceMethod_New.argtypes = [py_object] instancemethod = pythonapi.PyInstanceMethod_New class Example: ... pass ... Example.id = instancemethod(id) x = Example() x.id() 12597296 id(x) 12597296 A pyCapi module that exposed via ctypes useful C functions not otherwise accessible, with predefinition of restype and argtypes and anything else needed, might make a nice addition to PyPI if not the stdlib. You have done two here and I believe others have posted others. tjr -- http://mail.python.org/mailman/listinfo/python-list
Re: no unbound methods in py3k
Terry Reedy schrieb: Thomas Heller wrote: Christian Heimes schrieb: I've written PyInstanceMethod_Type for this use case. It's not (yet) available for Python code. Oh, wait - there's ctypes: Python 3.0rc1 (r30rc1:66507, Sep 18 2008, 14:47:08) [MSC v.1500 32 bit (Intel)] on win32 Type help, copyright, credits or license for more information. from ctypes import * pythonapi.PyInstanceMethod_New.restype = py_object pythonapi.PyInstanceMethod_New.argtypes = [py_object] instancemethod = pythonapi.PyInstanceMethod_New class Example: ... pass ... Example.id = instancemethod(id) x = Example() x.id() 12597296 id(x) 12597296 A pyCapi module that exposed via ctypes useful C functions not otherwise accessible, with predefinition of restype and argtypes and anything else needed, might make a nice addition to PyPI if not the stdlib. You have done two here and I believe others have posted others. Well, Lenard Lindstrom has some time ago contributed a module like that which is available in the (more or less unmaintained) ctypeslib project: http://svn.python.org/projects/ctypes/trunk/ctypeslib/ctypeslib/contrib/pythonhdr.py However, it was probably more meant to provide a complete Python C api, instead of concentrating on stuff not available to Python otherwise. Thomas -- http://mail.python.org/mailman/listinfo/python-list
Re: no unbound methods in py3k
Thomas Heller wrote: Ok, so one has to write an extension to access or expose it. Oh, wait - there's ctypes: I wrote the type to help the Pyrex and Cython developers to port their software to 3.0. I planed to expose the type as __builtin__.instancemethod but forgot it. Maybe we can convince Barry together. He still considers my bug as a release blocker for 3.0. Christian -- http://mail.python.org/mailman/listinfo/python-list
Re: no unbound methods in py3k
Christian Heimes schrieb: Thomas Heller wrote: Ok, so one has to write an extension to access or expose it. Oh, wait - there's ctypes: I wrote the type to help the Pyrex and Cython developers to port their software to 3.0. I planed to expose the type as __builtin__.instancemethod but forgot it. Maybe we can convince Barry together. He still considers my bug as a release blocker for 3.0. Issue 3787 is marked as release blocker, but for 3.1 IIUC. Would it help if I post my use case to the tracker? Thomas -- http://mail.python.org/mailman/listinfo/python-list
Re: no unbound methods in py3k
Thomas Heller wrote: but this is very ugly, imo. Is there another way? The raw_func instances that I have are not descriptors (they do not implement a __get__() method...) I've written PyInstanceMethod_Type for this use case. It's not (yet) available for Python code. Barry hasn't decided whether he should expose the type so late in the release cycle or not. See http://bugs.python.org/issue3787 and http://docs.python.org/dev/3.0/c-api/method.html?highlight=pyinstancemethod#PyInstanceMethod_Type Christian -- http://mail.python.org/mailman/listinfo/python-list
Re: no unbound methods in py3k
Thomas Heller a écrit : I'm currently using code like this to create unbound methods from functions and stick them into classes: method = new.instancemethod(raw_func, None, cls) setattr(cls, name, method) setattr(cls, name, func) would work better - given that either isinstance(raw_func, function) or raw_func.__get__ is implemented the right way. -- http://mail.python.org/mailman/listinfo/python-list