Документация Python неофициальный перевод

weakref.md

104 строк · 9.7 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.13/c-api/weakref.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты слабых ссылок89Python поддерживает *слабые ссылки* как объекты первого класса. Существует два конкретных типа объектов, которые напрямую реализуют слабые ссылки. Первый – простой объект-ссылка, а второй действует как прокси для исходного объекта, насколько это возможно.1011#### `int PyWeakref_Check(PyObject *ob)`1213Возвращает ненулевое значение, если *ob* является объектом-ссылкой или объектом-прокси. Эта функция всегда выполняется успешно.1415#### `int PyWeakref_CheckRef(PyObject *ob)`1617Возвращает ненулевое значение, если *ob* является объектом-ссылкой или подклассом типа ссылки. Эта функция всегда выполняется успешно.1819#### `int PyWeakref_CheckRefExact(PyObject *ob)`2021Возвращает ненулевое значение, если *ob* является объектом-ссылкой, но не подклассом типа ссылки. Эта функция всегда выполняется успешно.2223#### `int PyWeakref_CheckProxy(PyObject *ob)`2425Возвращает ненулевое значение, если *ob* является объектом-прокси. Эта функция всегда выполняется успешно.2627#### `PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)`2829*Возвращаемое значение: новая ссылка.*3031*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable).*3233Возвращает объект слабой ссылки для объекта *ob*. Всегда возвращает новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий объект слабой ссылки. Второй параметр *колбэк* может быть вызываемым объектом, который получает уведомление, когда *ob* собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. *колбэк* также может быть `None` или `NULL`. Если *ob* не является объектом, поддерживающим слабые ссылки, будет возбуждено исключение [`TypeError`](https://python-all.ru/3.13/library/exceptions.html#TypeError) и возвращено `NULL`.3435> **См. также**36>37> [`PyType_SUPPORTS_WEAKREFS()`](https://python-all.ru/3.13/c-api/type.html#c.PyType_SUPPORTS_WEAKREFS) для проверки, поддерживает ли *ob* слабые ссылки.3839#### `PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)`4041*Возвращаемое значение: новая ссылка.*4243*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable).*4445Возвращает прокси-объект слабой ссылки для объекта *ob*. Всегда возвращает новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий прокси-объект. Второй параметр *колбэк* может быть вызываемым объектом, который получает уведомление, когда *ob* собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. *колбэк* также может быть `None` или `NULL`. Если *ob* не является объектом, поддерживающим слабые ссылки, будет возбуждено исключение [`TypeError`](https://python-all.ru/3.13/library/exceptions.html#TypeError) и возвращено `NULL`.4647> **См. также**48>49> [`PyType_SUPPORTS_WEAKREFS()`](https://python-all.ru/3.13/c-api/type.html#c.PyType_SUPPORTS_WEAKREFS) для проверки, поддерживает ли *ob* слабые ссылки.5051#### `int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)`5253*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable), начиная с версии 3.13.*5455Получает [сильную ссылку](https://python-all.ru/3.13/glossary.html#term-strong-reference) на объект, на который указывает слабая ссылка *ref*, в *\*pobj*.5657- В случае успеха устанавливает *\*pobj* в новую [сильную ссылку](https://python-all.ru/3.13/glossary.html#term-strong-reference) на целевой объект и возвращает 1.58- Если ссылка мёртвая, устанавливает *\*pobj* в `NULL` и возвращает 0.59- В случае ошибки возбуждает исключение и возвращает -1.6061Добавлено в версии 3.13.6263#### `PyObject *PyWeakref_GetObject(PyObject *ref)`6465*Возвращаемое значение: заимствованная ссылка.*6667*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable).*6869Возвращает [заимствованную ссылку](https://python-all.ru/3.13/glossary.html#term-borrowed-reference) на целевой объект из слабой ссылки *ref*. Если целевой объект больше не существует, возвращает `Py_None`.7071> **Примечание**72>73> Эта функция возвращает [заимствованную ссылку](https://python-all.ru/3.13/glossary.html#term-borrowed-reference) на целевой объект. Это означает, что для объекта всегда следует вызывать [`Py_INCREF()`](https://python-all.ru/3.13/c-api/refcounting.html#c.Py_INCREF), за исключением случаев, когда он не может быть уничтожен до последнего использования заимствованной ссылки.7475Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте [`PyWeakref_GetRef()`](https://python-all.ru/3.13/c-api/weakref.html#c.PyWeakref_GetRef).7677#### `PyObject *PyWeakref_GET_OBJECT(PyObject *ref)`7879*Возвращаемое значение: заимствованная ссылка.*8081Аналогично [`PyWeakref_GetObject()`](https://python-all.ru/3.13/c-api/weakref.html#c.PyWeakref_GetObject), но без проверки ошибок.8283Устарело с версии 3.13, будет удалено в версии 3.15: Вместо этого используйте [`PyWeakref_GetRef()`](https://python-all.ru/3.13/c-api/weakref.html#c.PyWeakref_GetRef).8485#### `void PyObject_ClearWeakRefs(PyObject *object)`8687*Часть [Stable ABI](https://python-all.ru/3.13/c-api/stable.html#stable).*8889Эта функция вызывается обработчиком [`tp_dealloc`](https://python-all.ru/3.13/c-api/typeobj.html#c.PyTypeObject.tp_dealloc) для очистки слабых ссылок.9091Эта функция перебирает слабые ссылки для *object* и вызывает колбэки для тех ссылок, у которых они есть. Она завершает работу, когда все колбэки были вызваны.9293#### `void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)`9495> *Это [нестабильное API](https://python-all.ru/3.13/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*9697Очищает слабые ссылки для *object* без вызова колбэков.9899Эта функция вызывается обработчиком [`tp_dealloc`](https://python-all.ru/3.13/c-api/typeobj.html#c.PyTypeObject.tp_dealloc) для типов с финализаторами (т.е. [`__del__()`](https://python-all.ru/3.13/reference/datamodel.html#object.__del__)). Обработчик для этих объектов сначала вызывает [`PyObject_ClearWeakRefs()`](https://python-all.ru/3.13/c-api/weakref.html#c.PyObject_ClearWeakRefs) для очистки слабых ссылок и вызова их колбэков, затем финализатор и, наконец, эту функцию для очистки любых слабых ссылок, которые могли быть созданы финализатором.100101В большинстве случаев вместо этой функции для очистки слабых ссылок лучше использовать [`PyObject_ClearWeakRefs()`](https://python-all.ru/3.13/c-api/weakref.html#c.PyObject_ClearWeakRefs).102103Добавлено в версии 3.13.104