Слабые ссылки (Weak Reference Objects)
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) -
Возвращаемое значение: Новая ссылка. Часть Стабильного ABI.
Возвращает объект слабой ссылки для объекта ob. Это всегда возвращает новую ссылку, но не гарантирует создания нового объекта; может быть возвращён существующий объект ссылки. Второй параметр, callback, может быть вызываемым объектом, который получает уведомление при удалении объекта ob из мусорного сборщика; он должен принимать один параметр, который будет самим объектом слабой ссылки. callback также может быть
NoneилиNULL. Если ob не является объектом, допускающим слабые ссылки, или callback не является вызываемым объектом,None, илиNULL, это вернётNULLи вызоветTypeError.
-
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback) -
Возвращаемое значение: Новая ссылка. Часть Стабильного ABI.
Возвращает объект прокси слабой ссылки для объекта ob. Это всегда возвращает новую ссылку, но не гарантирует создания нового объекта; может быть возвращён существующий объект прокси. Второй параметр, callback, может быть вызываемым объектом, который получает уведомление при удалении объекта ob из мусорного сборщика; он должен принимать один параметр, который будет самим объектом слабой ссылки. callback также может быть
NoneилиNULL. Если ob не является объектом, допускающим слабые ссылки, или callback не является вызываемым объектом,None, илиNULL, это вернётNULLи вызоветTypeError.
-
PyObject *PyWeakref_GetObject(PyObject *ref) -
Возвращаемое значение: Заимствованная ссылка. Часть Стабильного ABI.
Возвращает объект, на который ссылается слабая ссылка ref. Если ссылка больше не активна, возвращает
Py_None.Примечание
Эта функция возвращает заимствованную ссылку на объект. Это означает, что вы всегда должны вызывать
Py_INCREF()на объекте, за исключением случаев, когда объект нельзя уничтожить до последнего использования заимствованной ссылки.
-
PyObject *PyWeakref_GET_OBJECT(PyObject *ref) -
Возвращаемое значение: Заимствованная ссылка.
Аналогично
PyWeakref_GetObject(), но реализовано как макрос, не выполняющий проверки на ошибки.
-
void PyObject_ClearWeakRefs(PyObject *object) -
Часть Стабильного ABI.
Эта функция вызывается обработчиком
tp_deallocдля очистки слабых ссылок.Эта функция итерируется по слабым ссылкам для объекта и вызывает обратные вызовы для тех ссылок, у которых они есть. Она возвращается, когда все обратные вызовы были выполнены.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/weakref.html