Re: python 3 problem: how to convert an extension method into a classMethod

Discussion in 'Python' started by Dave Angel, Feb 26, 2013.

  1. Dave Angel

    Dave Angel Guest

    On 02/26/2013 12:21 PM, Robin Becker wrote:
    > In python 2 I was able to improve speed of reportlab using a C extension
    > to optimize some heavily used methods.
    >
    > so I was able to do this
    >
    >
    > class A:


    That creates an old-style class in Python 2.x. They've been obsolete
    for many years. You want to derive from object:
    class A(object):

    Once you do, Python 2 and Python 3 should work the same. I can't help
    with the rest, unfortunately.

    > .....
    > def method(self,...):
    > ....
    >
    >
    > try:
    > from extension import c_method
    > import new
    > A.method = new.instancemethod(c_method,None,A)
    > except:
    > pass
    >
    > and if the try succeeds our method is bound as a class method ie is
    > unbound and works fine when I call it.
    >
    > In python 3 this doesn't seem to work at all. In fact the new module is
    > gone. The types.MethodType stuff doesn't seem to work.
    >
    > Is there a way in Python 3.3 to make this happen? This particular method
    > is short, but is called many times so adding python wrapping layers is
    > not a good way forward.
    >
    > If the above cannot be made to work (another great victory for Python 3)
    > then is there a way to bind an external method to the instance without
    > incurring too much overhead.
    >
    > Alternatively could it make sense to implement an accelerated basetype
    > that just contains the accelerated methods of class A. I could then
    > imagine doing something like
    >
    > try:
    > from extension import class c_baseA as baseA
    > except:
    > class baseA:
    > def method(....)
    >
    > class A(baseA):
    > .....
    >
    > presumably I then get some kind of penalty for the base class lookup,
    > but how bad is that?



    --
    DaveA
     
    Dave Angel, Feb 26, 2013
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Robin Becker
    Replies:
    1
    Views:
    137
    Steven D'Aprano
    Feb 27, 2013
  2. Peter Otten
    Replies:
    0
    Views:
    129
    Peter Otten
    Feb 26, 2013
  3. Mark Lawrence
    Replies:
    0
    Views:
    135
    Mark Lawrence
    Feb 26, 2013
  4. Peter Otten
    Replies:
    0
    Views:
    137
    Peter Otten
    Feb 26, 2013
  5. Ethan Furman
    Replies:
    0
    Views:
    157
    Ethan Furman
    Feb 26, 2013
Loading...

Share This Page