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

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(), но реализована в виде макроса, который не проверяет ошибки.