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

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. Part of the Stable ABI.

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

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Return value: New reference. Part of the Stable ABI.

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

PyObject *PyWeakref_GetObject(PyObject *ref)
Return value: Borrowed reference. Part of the Stable ABI.

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

Примечание

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

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

Аналогичен PyWeakref_GetObject(), но реализован как макрос, который не проверяет ошибки.

Вернуться на верх