How to modify object attribute by python C API

Gabriel Genellina gagsl-py at
Fri Jan 12 05:27:18 CET 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",
>     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

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! 

More information about the Python-list mailing list