[capi-sig] Python 3.x PyObject_HEAD versus PyObject_VAR_HEAD
M.-A. Lemburg
mal at egenix.com
Tue Feb 2 12:54:06 CET 2010
Philip Semanchuk wrote:
>
> On Feb 1, 2010, at 5:27 AM, M.-A. Lemburg wrote:
>> Perhaps you are confusing this with PyVarObject_HEAD_INIT() ?!
>
>
> THanks for your reply. You're right, I should have said that it is
> PyVarObject_HEAD_INIT that's used hundreds of times while
> PyObject_HEAD_INIT is hardly used at all (according to `grep -r`).
> Actually, I can state that even more strongly: PyObject_HEAD_INIT is
> only used once -- in the #define for PyVarObject_HEAD_INIT.
>
> After spending another hour reading the Python source, I think I get it
> now. As is often the case, the problem came from not reading carefully.
> When I saw this:
>
> PyTypeObject PyFloat_Type = {
> PyVarObject_HEAD_INIT(&PyType_Type, 0)
> "float",
> sizeof(PyFloatObject),
Right, it's being used to init the (static) type object PyFloat_Type
in the above case.
> I saw PyVarObject_HEAD_INIT being used to initialize a PyFloatObject,
> which is not the case -- it's initializing a PyTypeObject. Since the
> PyTypeObject struct definition uses PyObject_VAR_HEAD, it makes sense
> that PyVarObject_HEAD_INIT is used to initialize it.
>
> That also explains why PyVarObject_HEAD_INIT shows up so much in the
> Python source -- it's all those PyTypeObjects getting initialized.
Right.
> This brings up two more questions that I could probably answer with more
> reading, but if you have time for some further explanation I'd
> appreciate it. First, in what context would one use PyObject_HEAD_INIT?
> Second, why does the PyTypeObject struct definition use
> PyObject_VAR_HEAD when a type object has no concept of length?
It does: additional members can be stored in the variable part of the
object, ie. low-level attributes which are exposed as slots in
Python.
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Feb 02 2010)
>>> Python/Zope Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
::: Try our new mxODBC.Connect Python Database Interface for free ! ::::
eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48
D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
Registered at Amtsgericht Duesseldorf: HRB 46611
http://www.egenix.com/company/contact/
More information about the capi-sig
mailing list