Объекты слабых ссылок¶Weak Reference Objects
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)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает объект слабой ссылки для объекта ob. Всегда возвращает новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий объект слабой ссылки. Второй параметр колбэк может быть вызываемым объектом, который получает уведомление, когда ob собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. колбэк также может быть
NoneилиNULL. Если ob не является объектом, поддерживающим слабые ссылки, будет возбуждено исключениеTypeErrorи возвращеноNULL.См. также
PyType_SUPPORTS_WEAKREFS()для проверки, поддерживает ли ob слабые ссылки.
-
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает прокси-объект слабой ссылки для объекта ob. Всегда возвращает новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий прокси-объект. Второй параметр колбэк может быть вызываемым объектом, который получает уведомление, когда ob собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. колбэк также может быть
NoneилиNULL. Если ob не является объектом, поддерживающим слабые ссылки, будет возбуждено исключениеTypeErrorи возвращеноNULL.См. также
PyType_SUPPORTS_WEAKREFS()для проверки, поддерживает ли ob слабые ссылки.
-
int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)¶
- Часть Stable ABI, начиная с версии 3.13.
Получает сильную ссылку на объект, на который указывает слабая ссылка ref, в *pobj.
В случае успеха устанавливает *pobj в новую сильную ссылку на целевой объект и возвращает 1.
Если ссылка мёртвая, устанавливает *pobj в
NULLи возвращает 0.В случае ошибки возбуждает исключение и возвращает -1.
Добавлено в версии 3.13.
-
PyObject *PyWeakref_GetObject(PyObject *ref)¶
- Возвращаемое значение: заимствованная ссылка. Часть Stable 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)¶
- Часть Stable ABI.
Эта функция вызывается обработчиком
tp_deallocдля очистки слабых ссылок.Эта функция перебирает слабые ссылки для object и вызывает колбэки для тех ссылок, у которых они есть. Она завершает работу, когда все колбэки были вызваны.
-
void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)¶
- Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.
Очищает слабые ссылки для object без вызова колбэков.
Эта функция вызывается обработчиком
tp_deallocдля типов с финализаторами (т.е.__del__()). Обработчик для этих объектов сначала вызываетPyObject_ClearWeakRefs()для очистки слабых ссылок и вызова их колбэков, затем финализатор и, наконец, эту функцию для очистки любых слабых ссылок, которые могли быть созданы финализатором.В большинстве случаев вместо этой функции для очистки слабых ссылок лучше использовать
PyObject_ClearWeakRefs().Добавлено в версии 3.13.