[Pyrex] C-level constructors
    David McNab 
    david at rebirthing.co.nz
       
    Wed Nov  7 11:38:49 CET 2007
    
    
  
Hi,
Is there any way to implement an extension type's constructor so that it
can be called with C data types (even if this means not being able to
invoke the constructor from Python code outside of the Pyrex
environment)?
For example:
  cdef class Foo:
      cdef int foo
      def __init__(self, int foo):
          self.foo = foo
This is straightforward, the compiler turns it into fairly efficient C.
But what if an extension type has attributes that don't map easily to
Python objects, for example:
   cdef class Foo:
       cdef unsigned short **audioBufs
       cdef __init__(self, short **audioBufs):
           self.audioBufs = audioBufs
which is illegal.
For now, I'm implementing my extensions with no __init__ or __cinit__,
and instead adding a method '_init_', eg:
   cdef class Foo:
       cdef unsigned short **audioBufs
       cdef _init_(self, short **audioBufs):
           self.audioBufs = audioBufs
and when constructing, I do:
   cdef Foo myfoo
   cdef short **bufs
   ...
   myfoo = Foo(); myfoo._init_(bufs)
But - is there a better way to do this?
What I'm aiming for is to be able to construct these objects with
absolute minimum overhead, since they will be getting created/destroyed
within tight loops.
Thanks if you can help
Cheers
David
    
    
More information about the Pyrex
mailing list