Слабые ссылочные объекты

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

int PyWeakref_Check(ob)

Возвращает true, если ob является ссылкой или прокси-объект.

int PyWeakref_CheckRef(ob)

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

int PyWeakref_CheckProxy(ob)

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