Python/C API and setattr
Thomas S. Strinnhed
thstr at serop.abb.se
Thu Jun 10 01:37:56 EDT 1999
Hi
Michael P. Reilly wrote:
> [quoted my message]
> Thomas, the prototype for functions in the setattr slot of a Python type
> is:
> typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
>
> Your counter_setattr function should return an int, true (0) for
> success, false (-1) for error. I believe the source code and Mark's
> book (somewhere in Ch 15? but I don't have the book with me) are about
> the only places this is documented, and it is very obscure.
>
> "This looks like a job for Documentation Man!"
>
> -Arcege
Thanks everyone, I finally managed to get it all to work.
Embarrassing enough, the answer was in the Programming Python-book all
the time (in ch.14 at p.561), but as said below: "it is very obscure".
Actually we were all almost right, the prototype in the book is
static int mytype_setattr(mytype *x, char *name, PyObject *value);
so the problem was me trying to return nothing at all, None, the
int value assigned and so on.
I guess this answers a question from an earlier thread:
"Programming Python" still worthwhile?
with a big: "Yes, very much so!" (as goes for c.l.py :-)
If anyone is interrested I've pasted the code to my function
as it turned out below.
Many Thanks
-- Thomas S. Strinnhed. thstr at serop.abb.se
static int counter_setattr(counterobject *self, char *name, PyObject *v)
{
if(strcmp(name, "value") == 0)
{
self->value = (int)PyInt_AsLong(v);
return 0;
}
return -1;
}
More information about the Python-list
mailing list