classification
Title: C-API documentation clarification for tp_dictoffset
Type: Stage:
Components: Documentation Versions: Python 3.4, Python 3.5, Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Chris.Colbert, asvetlov, docs@python, eryksun, mkysel
Priority: normal Keywords:

Created on 2012-10-18 00:27 by Chris.Colbert, last changed 2019-03-15 23:32 by BreamoreBoy.

Messages (3)
msg173222 - (view) Author: Chris Colbert (Chris.Colbert) Date: 2012-10-18 00:27
The documentation of the tp_dictoffset is a bit unclear when describing the responsibilities of a base type with a nonzero tp_dictoffset.
http://docs.python.org/c-api/typeobj.html

I feel there should some statement to the effect of:

"""

If a type defines a nonzero tp_dictoffset, that type is responsible for defining a `__dict__` slot as part of the tp_getset structures. Failure to do so will result in the dict being inaccesible from Python via `obj.__dict__` from instances of the type or subtypes.

"""

The reasoning is twofold:

1) `PyType_Ready` does not add the default getset members like `type_new` does. This prevents the instances of the type itself from retrieving `obj.__dict__`

2) `type_new` will provide the default `subtype_dict` getset member for subclasses, but this calls `get_builtin_base_with_dict` which will resolve to the most base type which is not heap allocated; in this case, the C type. Since this type has no `__dict__` getset member, the lookup fails.


Adding a bit of verbage about this "gotcha" would likely save some headaches in the future.
msg220995 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-06-19 15:46
@Chris can you prepare a patch for this?
msg221020 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2014-06-19 20:43
It could also mention the generic getter and setter functions for the PyGetSetDef that were added in 3.3: PyType_GenericGetDict and PyType_GenericSetDict.

https://docs.python.org/3/c-api/object.html#c.PyType_GenericGetDict
History
Date User Action Args
2019-03-15 23:32:49BreamoreBoysetnosy: - BreamoreBoy
2014-06-19 20:43:29eryksunsetnosy: + eryksun
messages: + msg221020
2014-06-19 15:46:06BreamoreBoysetnosy: + BreamoreBoy

messages: + msg220995
versions: - Python 2.6, Python 3.1, Python 3.2, Python 3.3
2013-07-01 16:27:29mkyselsetnosy: + mkysel
2012-10-25 13:56:33asvetlovsetnosy: + asvetlov
2012-10-18 00:27:43Chris.Colbertcreate