Слабые ссылочные объекты¶
Python поддерживает слабые ссылки как объекты первого класса. Есть два конкретных типа объектов, которые непосредственно реализуют слабые ссылки. Первый - это простой объект-ссылка, а второй действует как прокси для исходного объекта, насколько это возможно.
-
int PyWeakref_Check(PyObject *ob)¶
Возвращает ненулевое значение, если ob является либо ссылкой, либо прокси-объектом. Эта функция всегда успешна.
-
int PyWeakref_CheckRef(PyObject *ob)¶
Возвращает ненулевое значение, если ob является объектом ссылки. Эта функция всегда успешна.
-
int PyWeakref_CheckProxy(PyObject *ob)¶
Возвращает ненулевое значение, если 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
.
-
int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)¶
- Часть Стабильный ABI с версии 3.13.
Получить strong reference на ссылаемый объект из слабой ссылки, ref, в *pobj.
В случае успеха установите *pobj в новый strong reference на объект по ссылке и верните 1.
Если ссылка мертва, установите *pobj в
NULL
и верните 0.При ошибке вызываем исключение и возвращаем -1.
Added in version 3.13.
-
PyObject *PyWeakref_GetObject(PyObject *ref)¶
- Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.
Возвращает borrowed reference объекту, на который ссылается слабая ссылка, ref. Если референт больше не жив, возвращается
Py_None
.Примечание
Эта функция возвращает borrowed reference объекту, на который ссылается. Это означает, что вы всегда должны вызывать
Py_INCREF()
для объекта, за исключением случаев, когда он не может быть уничтожен до последнего использования заимствованной ссылки.Утратил актуальность с версии 3.13, будет удален в версии 3.15: Вместо этого используйте
PyWeakref_GetRef()
.
-
PyObject *PyWeakref_GET_OBJECT(PyObject *ref)¶
- Возвращаемое значение: Заимствованная ссылка.
Аналогичен
PyWeakref_GetObject()
, но не проверяет ошибки.Утратил актуальность с версии 3.13, будет удален в версии 3.15: Вместо этого используйте
PyWeakref_GetRef()
.
-
void PyObject_ClearWeakRefs(PyObject *object)¶
- Часть Стабильный ABI.
Эта функция вызывается обработчиком
tp_dealloc
для очистки слабых ссылок.Перебирает слабые ссылки для объекта и вызывает обратные вызовы для тех ссылок, у которых они есть. Возвращается, когда все вызовы были выполнены.