5

I am developing a module for Python using a C API. How can I create a variable that is seen as global from Python?

For example, if my module is module, I want to create a variable g that does this job:

import module
print module.g

In particular, g is an integer.

Solution from Alex Martelli

PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);

PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);
Amro
  • 123,847
  • 25
  • 243
  • 454
Ruggero Turra
  • 16,929
  • 16
  • 85
  • 141

1 Answers1

4

You can use PyObject_SetAttrString in your module's initialization routine, with first argument o being (the cast to (PyObject*) of) your module, second argument attr_name being "g", third argument v being a variable

PyObject *v = PyLong_FromLong((long) 23);

(or whatever other value of course, 23 is just an example!-).

Do remember to decref v afterwards.

There are other ways, but this one is simple and general.

Alex Martelli
  • 854,459
  • 170
  • 1,222
  • 1,395
  • thanks, can you check the full solution that I report in the question? – Ruggero Turra Jun 08 '10 at 21:37
  • @wiso, yep, those 4 lines were exactly what I had in mind (except that you're naming the attribute "L" in the edit and it is "g" above in the original question, but that's no doubt just an oversight). – Alex Martelli Jun 08 '10 at 23:44