Callback mysteries
Fons Adriaensen
fons at linuxaudio.org
Thu Mar 24 20:02:25 EDT 2011
Hello all,
I wonder if someone could explain some of the following.
(Python 3.2)
I have a class which has a method called 'callback()'.
An instance of this class calls a C extension which
then calls back into Python.
In all cases below, two arguments are passed to the C
code and end up in
PyObject *object;
PyObject *method;
The original solution was:
P: self -> object, "callback" -> method
C: PyObject_CallMethodObjArgs(object, method, 0);
and this works nicely.
Just out of academic interest, I was wondering if the run-time
lookup of 'callback' could be avoided. My first attempt was:
P: self -> object, classname.callback -> method
C: PyObject_CallFunctionObjArgs(method, object, 0);
and this also works, I'm just not sure it's kosher.
Now in theory 'self.callback' should contain all info
that is required (or not ?). So I also tried:
P: self -> object, self.callback -> method
C: PyObject_CallFunctionObjArgs(method, PyMethod_Self(method), 0)
which fails,
P: self -> object, self.callback -> method
C: PyObject_CallFunctionObjArgs(PyMethod_Function(method), PyMethod_Self(method), 0);
which also fails.
And indeed the value returned by PyMethod_Self() is not equal to
the value of object (= self). In fact it seems not to depend on
the calling instance at all. Do I misunderstand what PyMethod_Self()
is supposed to return ?
I also tried
P: self -> object, self.callback -> method
C: PyObject_CallObject(method, 0);
which also fails.
Any comments that help me understand these things will be appreciated !
Ciao,
--
FA
More information about the Python-list
mailing list