Слабые эталонные объекты
Python поддерживает слабые ссылки как объекты первого класса. Есть два типа объектов, которые напрямую реализуют слабые ссылки. Первый — это простой ссылочный объект, а второй действует как прокси для исходного объекта, насколько это возможно.
-
int
PyWeakref_Check
(ob) Возвращает истину, если ob является ссылочным или прокси-объектом.
-
int
PyWeakref_CheckRef
(ob) Возвращает истину, если ob является ссылочным объектом.
-
int
PyWeakref_CheckProxy
(ob) Возвращает истину, если 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()
, но реализована в виде макроса, который не проверяет ошибки.