CPython: использование tp_finalize в статических типах, определенных в C, без специального `tp_dealloc`Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 CPython: использование tp_finalize в статических типах, определенных в C, без специального `tp_dealloc`

Сообщение Anonymous »

PEP 442 представил обратный вызов tp_finalize для определений типов Python (как однозначный эквивалент функции __del__ классов Python) и рекомендует использовать его для любого нетривиального разрушения.< /p>
Официальный документ API гласит:

Если установлен tp_finalize, интерпретатор вызывает его один раз при финализации экземпляр.

Однако это, похоже, не верно для статических типов Python, определенных в C, которые не определяют пользовательский освободитель (ни напрямую, ни унаследовано). со своей базы). Насколько я понимаю:
  • Статические типы без специального tp_dealloc будут наследовать механизм освобождения от базового типа Python (

    Код: Выделить всё

    PyBaseObject_Type
    ), то есть object_dealloc.

    Код: Выделить всё

    object_dealloc
    чрезвычайно прост, он просто вызывает tp_free данного типа объекта.
  • Поэтому tp_finalize никогда не будет вызываться для этих объектов.< /li>
[*]Типы, определенные в куче с помощью PyType_FromSpec и аналогичные, по умолчанию наследуют механизм освобождения subtype_dealloc .
  • Код: Выделить всё

    subtype_dealloc
    намного сложнее и будет вызывать PyObject_CallFinalizerFromDealloc.

< h2>Вопросы
Предполагая, что я правильно понимаю текущее поведение CPython:
  • Ожидается ли, что PyBaseObject_Type< /code> Deallocator не вызывает tp_finalize?
  • Если да, то каковы причины этого исключения?
  • И поможет ли это смысл тогда предоставлять subtype_dealloc как общий обратный вызов Dealloc для статических типов, определенных в C?


Подробнее здесь: https://stackoverflow.com/questions/788 ... tom-tp-dea
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»