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 |