Документация Python неофициальный перевод

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

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.