[capi-sig] Python 3.x PyObject_HEAD versus PyObject_VAR_HEAD

Philip Semanchuk philip at semanchuk.com
Sun Jan 31 00:19:31 CET 2010


Hi all,
I'm trying to port my posix_ipc extension to Python 3, and I'm  
confused by the documentation for PyObject_HEAD and PyObject_VAR_HEAD.

My understanding is that a PyObject-derived type should begin its  
PyTypeObject struct with PyObject_HEAD and a PyVarObject-derived type  
with PyObject_VAR_HEAD. the documentation says of PyVarObject, "This  
type does not often appear in the Python/C API."
http://docs.python.org/3.1/c-api/structures.html#PyVarObject

The doc also says that PyObject_VAR_HEAD, "is used when declaring new  
types which represent objects with a length that varies from instance  
to instance."
http://docs.python.org/3.1/c-api/structures.html#PyObject_VAR_HEAD

I assumed, then, that PyObject_VAR_HEAD would also appear  
infrequently, but that's not the case at all. In fact, I can't find  
PyObject_HEAD used at all in the Python 3.1.1 source code, whereas  
PyObject_VAR_HEAD is used hundreds of times, including for objects  
that don't have a length (like the float type, for instance).

Is the documentation wrong, or am I misreading it? Suggestions  
appreciated.

THanks
Philip


More information about the capi-sig mailing list