Eric Snow <ericsnowcurren...@gmail.com> added the comment:
Thanks for bringing this up, Hristo! "Initialization" (in this context, and hopefully everywhere in the C-API docs) is referring specifically to setting fields on a custom instance, much as you would expect in __init__ (or sometimes even __new__). In that regard PyType_GenericAlloc does not do any initialization. Instead, what it does is at a low level which is consistent with allocating a basic object for use in the CPython object machinery: * allocate the memory * NULL out the allocated memory * set initial refcount to 1 * fill in the fundamental PyObject fields (e.g. type) * register with GC Most of that relates directly to memory management and definitely belongs in PyType_GenericAlloc. I suppose you could argue that filling in the fundamental PyObject fields could go into PyType_GenericNew. However, doing so would leave the "allocated" object in an inconsistent state for the object machinery, to be resolved by the type's tp_new implementation. This could lead to problems for types that have a custom tp_new that does not use PyType_GenericNew. In that case moving anything from PyType_GenericAlloc to PyType_GenericNew would be a backward-incompatible change (and add complexity to the object creation workflow). Even though the chance for breakage is small, there would have to be a really strong reason to make such a change. Consequently, there isn't a whole lot to be done here and I'm closing this issue. If I've misunderstood then please let us know. We can re-open the issue then. FTR, PyType_GenericAlloc is implemented here: https://github.com/python/cpython/blob/master/Objects/typeobject.c#L963 ---------- nosy: +eric.snow resolution: -> rejected stage: -> resolved status: open -> closed versions: +Python 3.7, Python 3.8 -Python 3.2, Python 3.3, Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue23869> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com