Объекты слабых ссылок
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