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

Reply via email to