Слабые эталонные объекты

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

int PyWeakref_Check(ob)

Возвращает истину, если ob является ссылочным или прокси-объектом.

int PyWeakref_CheckRef(ob)

Возвращает истину, если ob является ссылочным объектом.

int PyWeakref_CheckProxy(ob)

Возвращает истину, если ob является прокси-объектом.

PyObject* PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Return value: New reference.

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

PyObject* PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Return value: New reference.

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

PyObject* PyWeakref_GetObject(PyObject *ref)
Return value: Borrowed reference.

Возвращает объект, на который указывает ссылка, из слабой ссылки, ref. Если референт больше не существует, возвращается Py_None.

Примечание

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

PyObject* PyWeakref_GET_OBJECT(PyObject *ref)
Return value: Borrowed reference.

Похожа на PyWeakref_GetObject(), но реализован в виде макроса, который не проверяет ошибки.