Слабые эталонные объекты¶
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 и вызывает обратные вызовы для тех ссылок, у которых они есть. Он возвращается, когда были предприняты все обратные вызовы.