Spec-Zone.ru › Python 3.13

Объекты слабых ссылок

Python поддерживает слабые ссылки как объекты первого класса. Существуют два специфичных типа объектов, которые напрямую реализуют слабые ссылки. Первый — это простой объект ссылки, а второй действует как прокси для исходного объекта, насколько это возможно.

int PyWeakref_Check(PyObject *ob)

Возвращает ненулевое значение, если ob является объектом ссылки или прокси. Эта функция всегда выполняется успешно.

int PyWeakref_CheckRef(PyObject *ob)

Возвращает ненулевое значение, если ob является объектом ссылки. Эта функция всегда выполняется успешно.

int PyWeakref_CheckProxy(PyObject *ob)

Возвращает ненулевое значение, если ob является объектом прокси. Эта функция всегда выполняется успешно.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Значение возврата: Новая ссылка. Часть Стабильного API.

Возвращает объект слабой ссылки для объекта ob. Это всегда вернёт новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий объект ссылки. Второй параметр, callback, может быть вызываемым объектом, который получает уведомление при сборе мусора ob; он должен принимать один параметр, который будет самим объектом слабой ссылки. callback также может быть None или NULL. Если ob не является объектом, поддерживающим слабые ссылки, или callback не является вызываемым объектом, None, или NULL, это вернёт NULL и поднимет исключение TypeError.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Значение возврата: Новая ссылка. Часть Стабильного API.

Возвращает объект прокси слабой ссылки для объекта ob. Это всегда вернёт новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий объект прокси. Второй параметр, callback, может быть вызываемым объектом, который получает уведомление при сборе мусора ob; он должен принимать один параметр, который будет самим объектом слабой ссылки. callback также может быть None или NULL. Если ob не является объектом, поддерживающим слабые ссылки, или callback не является вызываемым объектом, None, или NULL, это вернёт NULL и поднимет исключение TypeError.

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
Часть Стабильного API с версии 3.13.

Получает сильную ссылку на ссылкуемый объект из слабой ссылки ref в *pobj.

  • При успехе, устанавливает *pobj на новую сильную ссылку на ссылкуемый объект и возвращает 1.
  • Если ссылка умерла, устанавливает *pobj на NULL и возвращает 0.
  • В случае ошибки, поднимает исключение и возвращает -1.

Добавлена в версии 3.13.

PyObject *PyWeakref_GetObject(PyObject *ref)
Значение возврата: Заимствованная ссылка. Часть Стабильного API.

Возвращает заимствованную ссылку на ссылкуемый объект из слабой ссылки ref. Если объект-ссылка больше не существует, возвращает Py_None.

Примечание

Эта функция возвращает заимствованную ссылку на ссылкуемый объект. Это означает, что вы всегда должны вызывать Py_INCREF() на объекте, за исключением случаев, когда он не может быть уничтожен до последнего использования заимствованной ссылки.

Устарело с версии 3.13, будет удалено в версии 3.15: Используйте PyWeakref_GetRef() вместо этого.

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Значение возврата: Заимствованная ссылка.

Аналогично PyWeakref_GetObject(), но не выполняет проверку ошибок.

Устарело с версии 3.13, будет удалено в версии 3.15: Используйте PyWeakref_GetRef() вместо этого.

void PyObject_ClearWeakRefs(PyObject *object)
Часть Стабильного API.

Эта функция вызывается обработчиком tp_dealloc для очистки слабых ссылок.

Этот цикл проходит по слабым ссылкам для object и вызывает обратные вызовы для тех ссылок, у которых они есть. Он завершает работу, когда все обратные вызовы были попытки.

void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)
Это нестабильный API. Он может измениться без предупреждения в небольших выпусках.

Очищает слабые ссылки для object без вызова обратных вызовов.

Эта функция вызывается обработчиком tp_dealloc для типов с финализаторами (т.е., __del__()). Обработчик для таких объектов сначала вызывает PyObject_ClearWeakRefs() для очистки слабых ссылок и вызова их обратных вызовов, затем финализатор, а затем эту функцию для очистки любых слабых ссылок, которые могут быть созданы финализатором.

В большинстве случаев предпочтительнее использовать PyObject_ClearWeakRefs() для очистки слабых ссылок вместо этой функции.

Добавлена в версии 3.13.

© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/weakref.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API