Issue 16272: C-API documentation clarification for tp_dictoffset (original) (raw)

Issue16272

Created on 2012-10-18 00:27 by Chris.Colbert, last changed 2022-04-11 14:57 by admin.

Messages (2)
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?
History
Date User Action Args
2022-04-11 14:57:37 admin set github: 60476
2021-03-05 13:35:24 eryksun set type: enhancementversions: + Python 3.8, Python 3.9, Python 3.10, - Python 2.7, Python 3.4, Python 3.5
2021-03-05 13:28:09 eryksun set messages: -
2019-03-15 23:32:49 BreamoreBoy set nosy: - BreamoreBoy
2014-06-19 20:43:29 eryksun set nosy: + eryksunmessages: +
2014-06-19 15:46:06 BreamoreBoy set nosy: + BreamoreBoymessages: + versions: - Python 2.6, Python 3.1, Python 3.2, Python 3.3
2013-07-01 16:27:29 mkysel set nosy: + mkysel
2012-10-25 13:56:33 asvetlov set nosy: + asvetlov
2012-10-18 00:27:43 Chris.Colbert create