C/API Clarification

Sam sam at email-scan.com
Fri Oct 7 20:50:26 EDT 2005


Jeremy Moles writes:

> in the world I got the idea from! According to the docs, METH_VARARGS is
> (PyObject*, PyObject*)?

Right.

>                         My prototype shouldn't even compile... but it

Why wouldn't it compile?

> 2. No where in the docs does it show how to "correctly" create an
> instance of your custom PyTypeObject in C (rather than in the
> interpreter). I'm using:

That's what tp_alloc is for.  Then you call tp_init to initialize it.

But, your tp_new handler should already invoke tp_alloc, so it's cleaner to 
call tp_new, followed by tp_init.

> 3. I'm not able to return the "self" argument (useful, for instance,
> when you want to chain a group of method calls) without screwing things
> up really, really bad. For example:
> 
> PyObject* somefunc(cstruct* self, PyObject* args, PyObject* kargs) {
> 	self->pointerToData->doSomeStuff();
> 	
> 	return (PyObject*)(self);
> }
> 
> ...returns "something"; it has the methods you would expect, but trying
> to use the object when it gets back to the interpreter is pretty much
> undefined behavior. :) It's seen as a "<refcnt...>" instance in the
> interpreter, even though a dir() shows it still has the methods you
> would expect.

You need to increment the reference count of the object, in this case.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20051007/6adf14a2/attachment.sig>


More information about the Python-list mailing list