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

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)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyWeakref_GetObject(PyObject *ref)
Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.

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

Примечание

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

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

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

void PyObject_ClearWeakRefs(PyObject *object)
Part of the Стабильный ABI.

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

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

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