New submission from igo95862 <igo9...@gmail.com>:

The issue is that the function names are too similar to other function that do 
completely different things.


`PyObject_Init` this function does not use `__init__` at all.
What it does is sets the already allocated object pointer to the specific type 
and increments its reference.


`PyObject_New` this function has nothing to do with `__new__`. It mallocs the 
new object and when calls `PyObject_Init` to set its type and increment 
reference.


Most importantly neither function actually calls `__init__`. You need to do it 
manually otherwise you might get garbage in your object data from residual 
memory.


I think there should be a small example showing how to allocate objects on heap 
and initialize them. This is what I do (ignore the names):


```
SdBusMessageObject *message_object = PyObject_NEW(SdBusMessageObject, 
&SdBusMessageType);
SdBusMessageType.tp_init((PyObject *)message_object, NULL, NULL);
```

----------
assignee: docs@python
components: Documentation
messages: 380558
nosy: docs@python, igo95862
priority: normal
severity: normal
status: open
title: C API: Allocating Objects on the Heap. Misleading documentation.
versions: Python 3.8, Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue42292>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to