Spec-Zone.ru › Python 3.14

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

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

int PyWeakref_Check(PyObject *ob)

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

int PyWeakref_CheckRef(PyObject *ob)

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

int PyWeakref_CheckRefExact(PyObject *ob)

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

int PyWeakref_CheckProxy(PyObject *ob)

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

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

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

См. также

PyType_SUPPORTS_WEAKREFS() для проверки, можно ли создать слабую ссылку на ob.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

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

См. также

PyType_SUPPORTS_WEAKREFS() для проверки, можно ли создать слабую ссылку на ob.

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

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

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

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

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

Возвращает заимствованную ссылку на объект, на который указывает слабая ссылка 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().

int PyWeakref_IsDead(PyObject *ref)

Проверяет, является ли слабая ссылка ref мёртвой. Возвращает 1, если ссылка мертва, 0, если она активна, и -1 с установленным исключением, если ref не является объектом слабой ссылки.

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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