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

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

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

int PyWeakref_Check(PyObject *ob)

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

int PyWeakref_CheckRef(PyObject *ob)

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

int PyWeakref_CheckProxy(PyObject *ob)

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

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

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

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

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

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

Возвращает объект, на который ссылается слабая ссылка ref. Если этот объект уже удалён, возвращает Py_None.

Примечание

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

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

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

void PyObject_ClearWeakRefs(PyObject *object)
Часть Stable ABI.

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

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