How to modify object attribute by python C API
Gabriel Genellina
gagsl-py at yahoo.com.ar
Thu Jan 11 23:27:18 EST 2007
At Thursday 11/1/2007 18:37, Huayang Xia wrote:
>I get a python object by running a class' constructor. Then I need to
>modify the instance's attribute just like obj.attr1.attr2 = 'a' if in
>python's term.
>
> PyObject* py_obj_attr1 = PyObject_GetAttrString(obj, "attr1");
> PyObject_SetAttrString(py_obj_attr1, "attr2",
>PyString_FromString("a"));
> Py_DECREF(py_obj_attr1);
>
>The object py_obj_attr1 is said to be a "New reference". It's
>confusing, does it refer to the same object as "obj.attr1" in python's
>term? So that the above code equals: obj.attr1.attr2 = 'a' in python's
>term.
Read the Introduction in the "Python/C API Reference Manual". If you
plan to use Python from C code, better learn carefully how reference
counting works, or your progam won't work at all (or crash, in
unrelated places, at a later time...)
Going back to the example, yes, it's like obj.attr1.attr2 = 'a'. But
you should check that py_obj_attr1 is not NULL, and the same for
PyString_FromString. There are examples in the doc cited and in
"Extending and Embedding".
--
Gabriel Genellina
Softlab SRL
__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas
More information about the Python-list
mailing list