# SOME DESCRIPTIVE TITLE. # Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # FIRST AUTHOR , YEAR. # # Translators: # python-doc bot, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Python 3.9\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-01-03 16:35+0000\n" "PO-Revision-Date: 2025-09-22 17:54+0000\n" "Last-Translator: python-doc bot, 2025\n" "Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../c-api/gcsupport.rst:6 msgid "Supporting Cyclic Garbage Collection" msgstr "使对象类型支持循环垃圾回收" #: ../../c-api/gcsupport.rst:8 msgid "" "Python's support for detecting and collecting garbage which involves " "circular references requires support from object types which are " "\"containers\" for other objects which may also be containers. Types which " "do not store references to other objects, or which only store references to " "atomic types (such as numbers or strings), do not need to provide any " "explicit support for garbage collection." msgstr "" "Python " "对循环引用的垃圾检测与回收需要“容器”对象类型的支持,此类型的容器对象中可能包含其它容器对象。不保存其它对象的引用的类型,或者只保存原子类型(如数字或字符串)的引用的类型,不需要显式提供垃圾回收的支持。" #: ../../c-api/gcsupport.rst:15 msgid "" "To create a container type, the :c:member:`~PyTypeObject.tp_flags` field of " "the type object must include the :const:`Py_TPFLAGS_HAVE_GC` and provide an " "implementation of the :c:member:`~PyTypeObject.tp_traverse` handler. If " "instances of the type are mutable, a :c:member:`~PyTypeObject.tp_clear` " "implementation must also be provided." msgstr "" "若要创建一个容器类,类型对象的 :c:member:`~PyTypeObject.tp_flags` 字段必须包含 " ":const:`Py_TPFLAGS_HAVE_GC` 并提供一个 :c:member:`~PyTypeObject.tp_traverse` " "处理的实现。如果该类型的实例是可变的,还需要实现 :c:member:`~PyTypeObject.tp_clear` 。" #: ../../c-api/gcsupport.rst:24 msgid "" "Objects with a type with this flag set must conform with the rules " "documented here. For convenience these objects will be referred to as " "container objects." msgstr "设置了此标志位的类型的对象必须符合此处记录的规则。为方便起见,下文把这些对象称为容器对象。" #: ../../c-api/gcsupport.rst:28 msgid "Constructors for container types must conform to two rules:" msgstr "容器类型的构造函数必须符合两个规则:" #: ../../c-api/gcsupport.rst:30 msgid "" "The memory for the object must be allocated using :c:func:`PyObject_GC_New` " "or :c:func:`PyObject_GC_NewVar`." msgstr "" "必须使用 :c:func:`PyObject_GC_New` 或 :c:func:`PyObject_GC_NewVar` 为这些对象分配内存。" #: ../../c-api/gcsupport.rst:33 msgid "" "Once all the fields which may contain references to other containers are " "initialized, it must call :c:func:`PyObject_GC_Track`." msgstr "初始化了所有可能包含其他容器的引用的字段后,它必须调用 :c:func:`PyObject_GC_Track` 。" #: ../../c-api/gcsupport.rst:36 msgid "" "Similarly, the deallocator for the object must conform to a similar pair of " "rules:" msgstr "同样的,对象的释放器必须符合两个类似的规则:" #: ../../c-api/gcsupport.rst:39 msgid "" "Before fields which refer to other containers are invalidated, " ":c:func:`PyObject_GC_UnTrack` must be called." msgstr "在引用其它容器的字段失效前,必须调用 :c:func:`PyObject_GC_UnTrack` 。" #: ../../c-api/gcsupport.rst:42 msgid "" "The object's memory must be deallocated using :c:func:`PyObject_GC_Del`." msgstr "必须使用 :c:func:`PyObject_GC_Del` 释放对象的内存。" #: ../../c-api/gcsupport.rst:45 msgid "" "If a type adds the Py_TPFLAGS_HAVE_GC, then it *must* implement at least a " ":c:member:`~PyTypeObject.tp_traverse` handler or explicitly use one from its" " subclass or subclasses." msgstr "" "如果一个类型添加了 Py_TPFLAGS_HAVE_GC,则它 *必须* 实现至少一个 " ":c:member:`~PyTypeObject.tp_traverse` 句柄或显式地使用来自其一个或多个子类的句柄。" #: ../../c-api/gcsupport.rst:49 msgid "" "When calling :c:func:`PyType_Ready` or some of the APIs that indirectly call" " it like :c:func:`PyType_FromSpecWithBases` or :c:func:`PyType_FromSpec` the" " interpreter will automatically populate the " ":c:member:`~PyTypeObject.tp_flags`, :c:member:`~PyTypeObject.tp_traverse` " "and :c:member:`~PyTypeObject.tp_clear` fields if the type inherits from a " "class that implements the garbage collector protocol and the child class " "does *not* include the :const:`Py_TPFLAGS_HAVE_GC` flag." msgstr "" "当调用 :c:func:`PyType_Ready` 或者 API 中某些间接调用它的函数例如 " ":c:func:`PyType_FromSpecWithBases` 或 :c:func:`PyType_FromSpec` 时解释器就自动填充 " ":c:member:`~PyTypeObject.tp_flags`, :c:member:`~PyTypeObject.tp_traverse` 和 " ":c:member:`~PyTypeObject.tp_clear` 字段,如果该类型是继承自实现了垃圾回收器协议的类并且该子类 *没有* 包括 " ":const:`Py_TPFLAGS_HAVE_GC` 旗标的话。" #: ../../c-api/gcsupport.rst:59 msgid "" "Analogous to :c:func:`PyObject_New` but for container objects with the " ":const:`Py_TPFLAGS_HAVE_GC` flag set." msgstr "" "类似于 :c:func:`PyObject_New` ,适用于设置了 :const:`Py_TPFLAGS_HAVE_GC` 标签的容器对象。" #: ../../c-api/gcsupport.rst:65 msgid "" "Analogous to :c:func:`PyObject_NewVar` but for container objects with the " ":const:`Py_TPFLAGS_HAVE_GC` flag set." msgstr "" "类似于 :c:func:`PyObject_NewVar` ,适用于设置了 :const:`Py_TPFLAGS_HAVE_GC` 标签的容器对象。" #: ../../c-api/gcsupport.rst:71 msgid "" "Resize an object allocated by :c:func:`PyObject_NewVar`. Returns the " "resized object or ``NULL`` on failure. *op* must not be tracked by the " "collector yet." msgstr "" "为 :c:func:`PyObject_NewVar` 所分配对象重新调整大小。 返回调整大小后的对象或在失败时返回 ``NULL``。 *op* " "必须尚未被垃圾回收器追踪。" #: ../../c-api/gcsupport.rst:77 msgid "" "Adds the object *op* to the set of container objects tracked by the " "collector. The collector can run at unexpected times so objects must be " "valid while being tracked. This should be called once all the fields " "followed by the :c:member:`~PyTypeObject.tp_traverse` handler become valid, " "usually near the end of the constructor." msgstr "" "把对象 *op* 加入到垃圾回收器跟踪的容器对象中。对象在被回收器跟踪时必须保持有效的,因为回收器可能在任何时候开始运行。在 " ":c:member:`~PyTypeObject.tp_traverse` 处理前的所有字段变为有效后,必须调用此函数,通常在靠近构造函数末尾的位置。" #: ../../c-api/gcsupport.rst:86 msgid "" "Returns non-zero if the object implements the garbage collector protocol, " "otherwise returns 0." msgstr "如果对象实现了垃圾回收器协议则返回非零值,否则返回 0。" #: ../../c-api/gcsupport.rst:89 msgid "" "The object cannot be tracked by the garbage collector if this function " "returns 0." msgstr "如果此函数返回 0 则对象无法被垃圾回收器追踪。" #: ../../c-api/gcsupport.rst:94 msgid "" "Returns 1 if the object type of *op* implements the GC protocol and *op* is " "being currently tracked by the garbage collector and 0 otherwise." msgstr "如果 *op* 对象的类型实现了 GC 协议且 *op* 目前正被垃圾回收器追踪则返回 1, 否则返回 0。" #: ../../c-api/gcsupport.rst:97 msgid "This is analogous to the Python function :func:`gc.is_tracked`." msgstr "这类似于 Python 函数 :func:`gc.is_tracked`。" #: ../../c-api/gcsupport.rst:104 msgid "" "Returns 1 if the object type of *op* implements the GC protocol and *op* has" " been already finalized by the garbage collector and 0 otherwise." msgstr "如果 *op* 对象的类型实现了 GC 协议且 *op* 已经被垃圾回收器终结则返回 1, 否则返回 0。" #: ../../c-api/gcsupport.rst:107 msgid "This is analogous to the Python function :func:`gc.is_finalized`." msgstr "这类似于 Python 函数 :func:`gc.is_finalized`。" #: ../../c-api/gcsupport.rst:114 msgid "" "Releases memory allocated to an object using :c:func:`PyObject_GC_New` or " ":c:func:`PyObject_GC_NewVar`." msgstr "" "释放对象的内存,该对象初始化时由 :c:func:`PyObject_GC_New` 或 :c:func:`PyObject_GC_NewVar` " "分配内存。" #: ../../c-api/gcsupport.rst:120 msgid "" "Remove the object *op* from the set of container objects tracked by the " "collector. Note that :c:func:`PyObject_GC_Track` can be called again on " "this object to add it back to the set of tracked objects. The deallocator " "(:c:member:`~PyTypeObject.tp_dealloc` handler) should call this for the " "object before any of the fields used by the " ":c:member:`~PyTypeObject.tp_traverse` handler become invalid." msgstr "" "从回收器跟踪的容器对象集合中移除 *op* 对象。 请注意可以在此对象上再次调用 :c:func:`PyObject_GC_Track` " "以将其加回到被跟踪对象集合。 释放器 (:c:member:`~PyTypeObject.tp_dealloc` 句柄) 应当在 " ":c:member:`~PyTypeObject.tp_traverse` 句柄所使用的任何字段失效之前为对象调用此函数。" #: ../../c-api/gcsupport.rst:129 msgid "" "The :c:func:`_PyObject_GC_TRACK` and :c:func:`_PyObject_GC_UNTRACK` macros " "have been removed from the public C API." msgstr "" ":c:func:`_PyObject_GC_TRACK` 和 :c:func:`_PyObject_GC_UNTRACK` 宏已从公有 C API " "中移除。" #: ../../c-api/gcsupport.rst:132 msgid "" "The :c:member:`~PyTypeObject.tp_traverse` handler accepts a function " "parameter of this type:" msgstr ":c:member:`~PyTypeObject.tp_traverse` 处理接收以下类型的函数形参。" #: ../../c-api/gcsupport.rst:137 msgid "" "Type of the visitor function passed to the " ":c:member:`~PyTypeObject.tp_traverse` handler. The function should be called" " with an object to traverse as *object* and the third parameter to the " ":c:member:`~PyTypeObject.tp_traverse` handler as *arg*. The Python core " "uses several visitor functions to implement cyclic garbage detection; it's " "not expected that users will need to write their own visitor functions." msgstr "" "传给 :c:member:`~PyTypeObject.tp_traverse` 处理的访问函数的类型。*object* " "是容器中需要被遍历的一个对象,第三个形参对应于 :c:member:`~PyTypeObject.tp_traverse` 处理的 *arg* " "。Python核心使用多个访问者函数实现循环引用的垃圾检测,不需要用户自行实现访问者函数。" #: ../../c-api/gcsupport.rst:144 msgid "" "The :c:member:`~PyTypeObject.tp_traverse` handler must have the following " "type:" msgstr ":c:member:`~PyTypeObject.tp_traverse` 处理必须是以下类型:" #: ../../c-api/gcsupport.rst:149 msgid "" "Traversal function for a container object. Implementations must call the " "*visit* function for each object directly contained by *self*, with the " "parameters to *visit* being the contained object and the *arg* value passed " "to the handler. The *visit* function must not be called with a ``NULL`` " "object argument. If *visit* returns a non-zero value that value should be " "returned immediately." msgstr "" "用于容器对象的遍历函数。 它的实现必须对 *self* 所直接包含的每个对象调用 *visit* 函数,*visit* " "的形参为所包含对象和传给处理程序的 *arg* 值。 *visit* 函数调用不可附带 ``NULL`` 对象作为参数。 如果 *visit* " "返回非零值,则该值应当被立即返回。" #: ../../c-api/gcsupport.rst:156 msgid "" "To simplify writing :c:member:`~PyTypeObject.tp_traverse` handlers, a " ":c:func:`Py_VISIT` macro is provided. In order to use this macro, the " ":c:member:`~PyTypeObject.tp_traverse` implementation must name its arguments" " exactly *visit* and *arg*:" msgstr "" "为了简化 :c:member:`~PyTypeObject.tp_traverse` 处理的实现,Python提供了一个 " ":c:func:`Py_VISIT` 宏。若要使用这个宏,必须把 :c:member:`~PyTypeObject.tp_traverse` " "的参数命名为 *visit* 和 *arg* 。" #: ../../c-api/gcsupport.rst:163 msgid "" "If *o* is not ``NULL``, call the *visit* callback, with arguments *o* and " "*arg*. If *visit* returns a non-zero value, then return it. Using this " "macro, :c:member:`~PyTypeObject.tp_traverse` handlers look like::" msgstr "" "如果 *o* 不为 ``NULL``,则调用 *visit* 回调函数,附带参数 *o* 和 *arg*。 如果 *visit* " "返回一个非零值,则返回该值。 使用此宏之后,:c:member:`~PyTypeObject.tp_traverse` 处理程序的形式如下::" #: ../../c-api/gcsupport.rst:176 msgid "" "The :c:member:`~PyTypeObject.tp_clear` handler must be of the " ":c:type:`inquiry` type, or ``NULL`` if the object is immutable." msgstr "" ":c:member:`~PyTypeObject.tp_clear` 处理程序必须为 :c:type:`inquiry` 类型,如果对象不可变则为 " "``NULL``。" #: ../../c-api/gcsupport.rst:182 msgid "" "Drop references that may have created reference cycles. Immutable objects " "do not have to define this method since they can never directly create " "reference cycles. Note that the object must still be valid after calling " "this method (don't just call :c:func:`Py_DECREF` on a reference). The " "collector will call this method if it detects that this object is involved " "in a reference cycle." msgstr "" "丢弃产生循环引用的引用。不可变对象不需要声明此方法,因为他们不可能直接产生循环引用。需要注意的是,对象在调用此方法后必须仍是有效的(不能对引用只调用 " ":c:func:`Py_DECREF` 方法)。当垃圾回收器检测到该对象在循环引用中时,此方法会被调用。"