[Pyrex] Assign C object to a cdeffed variable of a class

Stefano Esposito stefano.esposito87 at gmail.com
Mon Sep 10 16:52:49 CEST 2007


On Sun, 09 Sep 2007 09:53:03 -0700
Lenard Lindstrom <len-l at telus.net> wrote:

> Stefano Esposito wrote:
> > On Sat, 08 Sep 2007 10:05:44 -0700
> > Lenard Lindstrom <len-l at telus.net> wrote:
> >
> > [snip]
> >   
> >> But why? Is it not more sensible for package_new_from_file to return a 
> >> Package object?
> >>     
> >
> > Indeed i was returning the pypkg, but i haven't showed it on the list 'cause it was after the error :)
> >
> >   
> >> def package_new_from_file(filename):
> >>     cdef Package pypkg
> >>     cdef pmpkg_t *pkg
> >>     alpm_pkg_load(filename, &pkg)
> >>     pypkg = Package()
> >>     pypkg.pkg = pkg
> >>     return package
> >>     
> >
> > This worked, thanks :)
> >
> >   
> >> Better still, if alpm_pkg_load is the only way to create a pmpkp_t then 
> >> call it from the Package constructor.
> >>     
> >
> > Nope, it's not the only way.
> >
> > Thanks for the help, anyway... could you point me to a link which explains what is the exact meaning of cdeffing a pyrex defined class? :)
> >
> >   
> 
> I cannot find documentation on Pyrex class variables. So here are the 
> specifics. A cdeffed Pyrex class is an extension type. A cdef variable 
> that is an extension type allows access to the extension type's 
> attributes and C methods. A module level cdeffed variable is invisible 
> to Python programs. A Python exception is raised if an object of the 
> wrong class is  assigned to the variable. The self argument of and 
> extension type method has an implicitly extension type declaration.
> 
> Hope this helps.
> 
> Lenard

Yes, this helps a lot, thanks :)

-- 
Stefano Esposito <stefano.esposito87 at gmail.com>



More information about the Pyrex mailing list