# SOME DESCRIPTIVE TITLE. # Copyright (C) 2001 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.14\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-09-15 09:12+0000\n" "PO-Revision-Date: 2025-09-16 00:00+0000\n" "Last-Translator: python-doc bot, 2025\n" "Language-Team: German (https://app.transifex.com/python-doc/teams/5390/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../c-api/typeobj.rst:6 msgid "Type Object Structures" msgstr "" #: ../../c-api/typeobj.rst:8 msgid "" "Perhaps one of the most important structures of the Python object system is " "the structure that defines a new type: the :c:type:`PyTypeObject` " "structure. Type objects can be handled using any of the ``PyObject_*`` or " "``PyType_*`` functions, but do not offer much that's interesting to most " "Python applications. These objects are fundamental to how objects behave, so " "they are very important to the interpreter itself and to any extension " "module that implements new types." msgstr "" #: ../../c-api/typeobj.rst:16 msgid "" "Type objects are fairly large compared to most of the standard types. The " "reason for the size is that each type object stores a large number of " "values, mostly C function pointers, each of which implements a small part of " "the type's functionality. The fields of the type object are examined in " "detail in this section. The fields will be described in the order in which " "they occur in the structure." msgstr "" #: ../../c-api/typeobj.rst:23 msgid "" "In addition to the following quick reference, the :ref:`typedef-examples` " "section provides at-a-glance insight into the meaning and use of :c:type:" "`PyTypeObject`." msgstr "" #: ../../c-api/typeobj.rst:29 msgid "Quick Reference" msgstr "" #: ../../c-api/typeobj.rst:34 msgid "\"tp slots\"" msgstr "" #: ../../c-api/typeobj.rst:40 msgid "PyTypeObject Slot [#slots]_" msgstr "" #: ../../c-api/typeobj.rst:40 ../../c-api/typeobj.rst:201 msgid ":ref:`Type `" msgstr "" #: ../../c-api/typeobj.rst:40 msgid "special methods/attrs" msgstr "" #: ../../c-api/typeobj.rst:40 msgid "Info [#cols]_" msgstr "" #: ../../c-api/typeobj.rst:42 msgid "O" msgstr "" #: ../../c-api/typeobj.rst:42 msgid "T" msgstr "" #: ../../c-api/typeobj.rst:42 msgid "D" msgstr "" #: ../../c-api/typeobj.rst:42 msgid "I" msgstr "" #: ../../c-api/typeobj.rst:44 msgid " :c:member:`~PyTypeObject.tp_name`" msgstr "" #: ../../c-api/typeobj.rst:44 ../../c-api/typeobj.rst:86 #: ../../c-api/typeobj.rst:372 ../../c-api/typeobj.rst:377 msgid "const char *" msgstr "" #: ../../c-api/typeobj.rst:44 msgid "__name__" msgstr "" #: ../../c-api/typeobj.rst:44 ../../c-api/typeobj.rst:46 #: ../../c-api/typeobj.rst:48 ../../c-api/typeobj.rst:50 #: ../../c-api/typeobj.rst:52 ../../c-api/typeobj.rst:62 #: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:72 #: ../../c-api/typeobj.rst:74 ../../c-api/typeobj.rst:76 #: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:84 #: ../../c-api/typeobj.rst:86 ../../c-api/typeobj.rst:88 #: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:92 #: ../../c-api/typeobj.rst:99 ../../c-api/typeobj.rst:101 #: ../../c-api/typeobj.rst:103 ../../c-api/typeobj.rst:105 #: ../../c-api/typeobj.rst:107 ../../c-api/typeobj.rst:109 #: ../../c-api/typeobj.rst:111 ../../c-api/typeobj.rst:115 #: ../../c-api/typeobj.rst:117 ../../c-api/typeobj.rst:120 #: ../../c-api/typeobj.rst:122 ../../c-api/typeobj.rst:124 #: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:128 #: ../../c-api/typeobj.rst:130 ../../c-api/typeobj.rst:146 msgid "X" msgstr "" #: ../../c-api/typeobj.rst:46 msgid ":c:member:`~PyTypeObject.tp_basicsize`" msgstr "" #: ../../c-api/typeobj.rst:46 ../../c-api/typeobj.rst:48 #: ../../c-api/typeobj.rst:52 ../../c-api/typeobj.rst:99 #: ../../c-api/typeobj.rst:120 ../../c-api/typeobj.rst:343 #: ../../c-api/typeobj.rst:417 ../../c-api/typeobj.rst:448 #: ../../c-api/typeobj.rst:453 msgid ":c:type:`Py_ssize_t`" msgstr "" #: ../../c-api/typeobj.rst:48 msgid ":c:member:`~PyTypeObject.tp_itemsize`" msgstr "" #: ../../c-api/typeobj.rst:50 msgid ":c:member:`~PyTypeObject.tp_dealloc`" msgstr "" #: ../../c-api/typeobj.rst:50 ../../c-api/typeobj.rst:142 #: ../../c-api/typeobj.rst:146 ../../c-api/typeobj.rst:347 msgid ":c:type:`destructor`" msgstr "" #: ../../c-api/typeobj.rst:52 msgid ":c:member:`~PyTypeObject.tp_vectorcall_offset`" msgstr "" #: ../../c-api/typeobj.rst:54 msgid "(:c:member:`~PyTypeObject.tp_getattr`)" msgstr "" #: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:371 msgid ":c:type:`getattrfunc`" msgstr "" #: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:76 msgid "__getattribute__, __getattr__" msgstr "" #: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:57 #: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:76 #: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:88 #: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:92 msgid "G" msgstr "" #: ../../c-api/typeobj.rst:57 msgid "(:c:member:`~PyTypeObject.tp_setattr`)" msgstr "" #: ../../c-api/typeobj.rst:57 ../../c-api/typeobj.rst:376 msgid ":c:type:`setattrfunc`" msgstr "" #: ../../c-api/typeobj.rst:57 ../../c-api/typeobj.rst:79 msgid "__setattr__, __delattr__" msgstr "" #: ../../c-api/typeobj.rst:60 msgid ":c:member:`~PyTypeObject.tp_as_async`" msgstr "" #: ../../c-api/typeobj.rst:60 msgid ":c:type:`PyAsyncMethods` *" msgstr "" #: ../../c-api/typeobj.rst:60 ../../c-api/typeobj.rst:64 #: ../../c-api/typeobj.rst:66 ../../c-api/typeobj.rst:68 #: ../../c-api/typeobj.rst:82 msgid ":ref:`sub-slots`" msgstr "" #: ../../c-api/typeobj.rst:60 ../../c-api/typeobj.rst:64 #: ../../c-api/typeobj.rst:66 ../../c-api/typeobj.rst:68 #: ../../c-api/typeobj.rst:82 msgid "%" msgstr "" #: ../../c-api/typeobj.rst:62 msgid ":c:member:`~PyTypeObject.tp_repr`" msgstr "" #: ../../c-api/typeobj.rst:62 ../../c-api/typeobj.rst:74 #: ../../c-api/typeobj.rst:369 msgid ":c:type:`reprfunc`" msgstr "" #: ../../c-api/typeobj.rst:62 msgid "__repr__" msgstr "" #: ../../c-api/typeobj.rst:64 msgid ":c:member:`~PyTypeObject.tp_as_number`" msgstr "" #: ../../c-api/typeobj.rst:64 msgid ":c:type:`PyNumberMethods` *" msgstr "" #: ../../c-api/typeobj.rst:66 msgid ":c:member:`~PyTypeObject.tp_as_sequence`" msgstr "" #: ../../c-api/typeobj.rst:66 msgid ":c:type:`PySequenceMethods` *" msgstr "" #: ../../c-api/typeobj.rst:68 msgid ":c:member:`~PyTypeObject.tp_as_mapping`" msgstr "" #: ../../c-api/typeobj.rst:68 msgid ":c:type:`PyMappingMethods` *" msgstr "" #: ../../c-api/typeobj.rst:70 msgid ":c:member:`~PyTypeObject.tp_hash`" msgstr "" #: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:405 msgid ":c:type:`hashfunc`" msgstr "" #: ../../c-api/typeobj.rst:70 msgid "__hash__" msgstr "" #: ../../c-api/typeobj.rst:72 msgid ":c:member:`~PyTypeObject.tp_call`" msgstr "" #: ../../c-api/typeobj.rst:72 ../../c-api/typeobj.rst:237 #: ../../c-api/typeobj.rst:240 ../../c-api/typeobj.rst:441 msgid ":c:type:`ternaryfunc`" msgstr "" #: ../../c-api/typeobj.rst:72 msgid "__call__" msgstr "" #: ../../c-api/typeobj.rst:74 msgid ":c:member:`~PyTypeObject.tp_str`" msgstr "" #: ../../c-api/typeobj.rst:74 msgid "__str__" msgstr "" #: ../../c-api/typeobj.rst:76 msgid ":c:member:`~PyTypeObject.tp_getattro`" msgstr "" #: ../../c-api/typeobj.rst:76 ../../c-api/typeobj.rst:382 msgid ":c:type:`getattrofunc`" msgstr "" #: ../../c-api/typeobj.rst:79 msgid ":c:member:`~PyTypeObject.tp_setattro`" msgstr "" #: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:387 msgid ":c:type:`setattrofunc`" msgstr "" #: ../../c-api/typeobj.rst:82 msgid ":c:member:`~PyTypeObject.tp_as_buffer`" msgstr "" #: ../../c-api/typeobj.rst:82 msgid ":c:type:`PyBufferProcs` *" msgstr "" #: ../../c-api/typeobj.rst:84 msgid ":c:member:`~PyTypeObject.tp_flags`" msgstr "" #: ../../c-api/typeobj.rst:84 msgid "unsigned long" msgstr "" #: ../../c-api/typeobj.rst:84 ../../c-api/typeobj.rst:99 #: ../../c-api/typeobj.rst:113 ../../c-api/typeobj.rst:120 #: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:126 #: ../../c-api/typeobj.rst:128 msgid "?" msgstr "" #: ../../c-api/typeobj.rst:86 msgid ":c:member:`~PyTypeObject.tp_doc`" msgstr "" #: ../../c-api/typeobj.rst:86 msgid "__doc__" msgstr "" #: ../../c-api/typeobj.rst:88 msgid ":c:member:`~PyTypeObject.tp_traverse`" msgstr "" #: ../../c-api/typeobj.rst:88 ../../c-api/typeobj.rst:351 msgid ":c:type:`traverseproc`" msgstr "" #: ../../c-api/typeobj.rst:90 msgid ":c:member:`~PyTypeObject.tp_clear`" msgstr "" #: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:130 #: ../../c-api/typeobj.rst:248 ../../c-api/typeobj.rst:430 msgid ":c:type:`inquiry`" msgstr "" #: ../../c-api/typeobj.rst:92 msgid ":c:member:`~PyTypeObject.tp_richcompare`" msgstr "" #: ../../c-api/typeobj.rst:92 ../../c-api/typeobj.rst:407 msgid ":c:type:`richcmpfunc`" msgstr "" #: ../../c-api/typeobj.rst:92 msgid "__lt__, __le__, __eq__, __ne__, __gt__, __ge__" msgstr "" #: ../../c-api/typeobj.rst:99 msgid "(:c:member:`~PyTypeObject.tp_weaklistoffset`)" msgstr "" #: ../../c-api/typeobj.rst:101 msgid ":c:member:`~PyTypeObject.tp_iter`" msgstr "" #: ../../c-api/typeobj.rst:101 ../../c-api/typeobj.rst:413 msgid ":c:type:`getiterfunc`" msgstr "" #: ../../c-api/typeobj.rst:101 msgid "__iter__" msgstr "" #: ../../c-api/typeobj.rst:103 msgid ":c:member:`~PyTypeObject.tp_iternext`" msgstr "" #: ../../c-api/typeobj.rst:103 ../../c-api/typeobj.rst:415 msgid ":c:type:`iternextfunc`" msgstr "" #: ../../c-api/typeobj.rst:103 msgid "__next__" msgstr "" #: ../../c-api/typeobj.rst:105 msgid ":c:member:`~PyTypeObject.tp_methods`" msgstr "" #: ../../c-api/typeobj.rst:105 msgid ":c:type:`PyMethodDef` []" msgstr "" #: ../../c-api/typeobj.rst:107 msgid ":c:member:`~PyTypeObject.tp_members`" msgstr "" #: ../../c-api/typeobj.rst:107 msgid ":c:type:`PyMemberDef` []" msgstr "" #: ../../c-api/typeobj.rst:109 msgid ":c:member:`~PyTypeObject.tp_getset`" msgstr "" #: ../../c-api/typeobj.rst:109 msgid ":c:type:`PyGetSetDef` []" msgstr "" #: ../../c-api/typeobj.rst:111 msgid ":c:member:`~PyTypeObject.tp_base`" msgstr "" #: ../../c-api/typeobj.rst:111 ../../c-api/typeobj.rst:342 #: ../../c-api/typeobj.rst:357 msgid ":c:type:`PyTypeObject` *" msgstr "" #: ../../c-api/typeobj.rst:111 msgid "__base__" msgstr "" #: ../../c-api/typeobj.rst:113 msgid ":c:member:`~PyTypeObject.tp_dict`" msgstr "" #: ../../c-api/typeobj.rst:113 ../../c-api/typeobj.rst:132 #: ../../c-api/typeobj.rst:134 ../../c-api/typeobj.rst:136 #: ../../c-api/typeobj.rst:140 ../../c-api/typeobj.rst:342 #: ../../c-api/typeobj.rst:347 ../../c-api/typeobj.rst:351 #: ../../c-api/typeobj.rst:357 ../../c-api/typeobj.rst:358 #: ../../c-api/typeobj.rst:359 ../../c-api/typeobj.rst:363 #: ../../c-api/typeobj.rst:364 ../../c-api/typeobj.rst:365 #: ../../c-api/typeobj.rst:369 ../../c-api/typeobj.rst:371 #: ../../c-api/typeobj.rst:376 ../../c-api/typeobj.rst:378 #: ../../c-api/typeobj.rst:382 ../../c-api/typeobj.rst:383 #: ../../c-api/typeobj.rst:387 ../../c-api/typeobj.rst:388 #: ../../c-api/typeobj.rst:389 ../../c-api/typeobj.rst:393 #: ../../c-api/typeobj.rst:394 ../../c-api/typeobj.rst:395 #: ../../c-api/typeobj.rst:399 ../../c-api/typeobj.rst:400 #: ../../c-api/typeobj.rst:401 ../../c-api/typeobj.rst:405 #: ../../c-api/typeobj.rst:407 ../../c-api/typeobj.rst:408 #: ../../c-api/typeobj.rst:413 ../../c-api/typeobj.rst:415 #: ../../c-api/typeobj.rst:417 ../../c-api/typeobj.rst:419 #: ../../c-api/typeobj.rst:425 ../../c-api/typeobj.rst:430 #: ../../c-api/typeobj.rst:432 ../../c-api/typeobj.rst:436 #: ../../c-api/typeobj.rst:437 ../../c-api/typeobj.rst:441 #: ../../c-api/typeobj.rst:442 ../../c-api/typeobj.rst:443 #: ../../c-api/typeobj.rst:447 ../../c-api/typeobj.rst:452 #: ../../c-api/typeobj.rst:454 ../../c-api/typeobj.rst:458 #: ../../c-api/typeobj.rst:459 ../../c-api/typeobj.rst:463 #: ../../c-api/typeobj.rst:464 ../../c-api/typeobj.rst:465 msgid ":c:type:`PyObject` *" msgstr "" #: ../../c-api/typeobj.rst:113 msgid "__dict__" msgstr "" #: ../../c-api/typeobj.rst:115 msgid ":c:member:`~PyTypeObject.tp_descr_get`" msgstr "" #: ../../c-api/typeobj.rst:115 ../../c-api/typeobj.rst:393 msgid ":c:type:`descrgetfunc`" msgstr "" #: ../../c-api/typeobj.rst:115 msgid "__get__" msgstr "" #: ../../c-api/typeobj.rst:117 msgid ":c:member:`~PyTypeObject.tp_descr_set`" msgstr "" #: ../../c-api/typeobj.rst:117 ../../c-api/typeobj.rst:399 msgid ":c:type:`descrsetfunc`" msgstr "" #: ../../c-api/typeobj.rst:117 msgid "__set__, __delete__" msgstr "" #: ../../c-api/typeobj.rst:120 msgid "(:c:member:`~PyTypeObject.tp_dictoffset`)" msgstr "" #: ../../c-api/typeobj.rst:122 msgid ":c:member:`~PyTypeObject.tp_init`" msgstr "" #: ../../c-api/typeobj.rst:122 ../../c-api/typeobj.rst:363 msgid ":c:type:`initproc`" msgstr "" #: ../../c-api/typeobj.rst:122 msgid "__init__" msgstr "" #: ../../c-api/typeobj.rst:124 msgid ":c:member:`~PyTypeObject.tp_alloc`" msgstr "" #: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:342 msgid ":c:type:`allocfunc`" msgstr "" #: ../../c-api/typeobj.rst:126 msgid ":c:member:`~PyTypeObject.tp_new`" msgstr "" #: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:357 msgid ":c:type:`newfunc`" msgstr "" #: ../../c-api/typeobj.rst:126 msgid "__new__" msgstr "" #: ../../c-api/typeobj.rst:128 msgid ":c:member:`~PyTypeObject.tp_free`" msgstr "" #: ../../c-api/typeobj.rst:128 ../../c-api/typeobj.rst:349 msgid ":c:type:`freefunc`" msgstr "" #: ../../c-api/typeobj.rst:130 msgid ":c:member:`~PyTypeObject.tp_is_gc`" msgstr "" #: ../../c-api/typeobj.rst:132 msgid "<:c:member:`~PyTypeObject.tp_bases`>" msgstr "" #: ../../c-api/typeobj.rst:132 msgid "__bases__" msgstr "" #: ../../c-api/typeobj.rst:132 ../../c-api/typeobj.rst:134 msgid "~" msgstr "" #: ../../c-api/typeobj.rst:134 msgid "<:c:member:`~PyTypeObject.tp_mro`>" msgstr "" #: ../../c-api/typeobj.rst:134 msgid "__mro__" msgstr "" #: ../../c-api/typeobj.rst:136 msgid "[:c:member:`~PyTypeObject.tp_cache`]" msgstr "" #: ../../c-api/typeobj.rst:138 msgid "[:c:member:`~PyTypeObject.tp_subclasses`]" msgstr "" #: ../../c-api/typeobj.rst:138 ../../c-api/typeobj.rst:279 #: ../../c-api/typeobj.rst:349 ../../c-api/typeobj.rst:353 msgid "void *" msgstr "" #: ../../c-api/typeobj.rst:138 msgid "__subclasses__" msgstr "" #: ../../c-api/typeobj.rst:140 msgid "[:c:member:`~PyTypeObject.tp_weaklist`]" msgstr "" #: ../../c-api/typeobj.rst:142 msgid "(:c:member:`~PyTypeObject.tp_del`)" msgstr "" #: ../../c-api/typeobj.rst:144 msgid "[:c:member:`~PyTypeObject.tp_version_tag`]" msgstr "" #: ../../c-api/typeobj.rst:144 msgid "unsigned int" msgstr "" #: ../../c-api/typeobj.rst:146 msgid ":c:member:`~PyTypeObject.tp_finalize`" msgstr "" #: ../../c-api/typeobj.rst:146 msgid "__del__" msgstr "" #: ../../c-api/typeobj.rst:148 msgid ":c:member:`~PyTypeObject.tp_vectorcall`" msgstr "" #: ../../c-api/typeobj.rst:148 msgid ":c:type:`vectorcallfunc`" msgstr ":c:type:`vectorcallfunc`" #: ../../c-api/typeobj.rst:150 msgid "[:c:member:`~PyTypeObject.tp_watched`]" msgstr "" #: ../../c-api/typeobj.rst:150 msgid "unsigned char" msgstr "" #: ../../c-api/typeobj.rst:155 msgid "" "**()**: A slot name in parentheses indicates it is (effectively) deprecated." msgstr "" #: ../../c-api/typeobj.rst:157 msgid "" "**<>**: Names in angle brackets should be initially set to ``NULL`` and " "treated as read-only." msgstr "" #: ../../c-api/typeobj.rst:160 msgid "**[]**: Names in square brackets are for internal use only." msgstr "" #: ../../c-api/typeobj.rst:162 msgid "" "**** (as a prefix) means the field is required (must be non-``NULL``)." msgstr "" #: ../../c-api/typeobj.rst:164 msgid "Columns:" msgstr "" #: ../../c-api/typeobj.rst:166 msgid "**\"O\"**: set on :c:data:`PyBaseObject_Type`" msgstr "" #: ../../c-api/typeobj.rst:168 msgid "**\"T\"**: set on :c:data:`PyType_Type`" msgstr "" #: ../../c-api/typeobj.rst:170 msgid "**\"D\"**: default (if slot is set to ``NULL``)" msgstr "" #: ../../c-api/typeobj.rst:172 msgid "" "X - PyType_Ready sets this value if it is NULL\n" "~ - PyType_Ready always sets this value (it should be NULL)\n" "? - PyType_Ready may set this value depending on other slots\n" "\n" "Also see the inheritance column (\"I\")." msgstr "" #: ../../c-api/typeobj.rst:180 msgid "**\"I\"**: inheritance" msgstr "" #: ../../c-api/typeobj.rst:182 msgid "" "X - type slot is inherited via *PyType_Ready* if defined with a *NULL* " "value\n" "% - the slots of the sub-struct are inherited individually\n" "G - inherited, but only in combination with other slots; see the slot's " "description\n" "? - it's complicated; see the slot's description" msgstr "" #: ../../c-api/typeobj.rst:189 msgid "" "Note that some slots are effectively inherited through the normal attribute " "lookup chain." msgstr "" #: ../../c-api/typeobj.rst:195 msgid "sub-slots" msgstr "" #: ../../c-api/typeobj.rst:201 msgid "Slot" msgstr "" #: ../../c-api/typeobj.rst:201 msgid "special methods" msgstr "" #: ../../c-api/typeobj.rst:204 msgid ":c:member:`~PyAsyncMethods.am_await`" msgstr "" #: ../../c-api/typeobj.rst:204 ../../c-api/typeobj.rst:206 #: ../../c-api/typeobj.rst:208 ../../c-api/typeobj.rst:242 #: ../../c-api/typeobj.rst:244 ../../c-api/typeobj.rst:246 #: ../../c-api/typeobj.rst:250 ../../c-api/typeobj.rst:277 #: ../../c-api/typeobj.rst:281 ../../c-api/typeobj.rst:291 #: ../../c-api/typeobj.rst:432 msgid ":c:type:`unaryfunc`" msgstr "" #: ../../c-api/typeobj.rst:204 msgid "__await__" msgstr "" #: ../../c-api/typeobj.rst:206 msgid ":c:member:`~PyAsyncMethods.am_aiter`" msgstr "" #: ../../c-api/typeobj.rst:206 msgid "__aiter__" msgstr "" #: ../../c-api/typeobj.rst:208 msgid ":c:member:`~PyAsyncMethods.am_anext`" msgstr "" #: ../../c-api/typeobj.rst:208 msgid "__anext__" msgstr "" #: ../../c-api/typeobj.rst:210 msgid ":c:member:`~PyAsyncMethods.am_send`" msgstr "" #: ../../c-api/typeobj.rst:210 msgid ":c:type:`sendfunc`" msgstr "" #: ../../c-api/typeobj.rst:214 msgid ":c:member:`~PyNumberMethods.nb_add`" msgstr "" #: ../../c-api/typeobj.rst:214 ../../c-api/typeobj.rst:217 #: ../../c-api/typeobj.rst:219 ../../c-api/typeobj.rst:222 #: ../../c-api/typeobj.rst:224 ../../c-api/typeobj.rst:227 #: ../../c-api/typeobj.rst:229 ../../c-api/typeobj.rst:232 #: ../../c-api/typeobj.rst:234 ../../c-api/typeobj.rst:252 #: ../../c-api/typeobj.rst:255 ../../c-api/typeobj.rst:257 #: ../../c-api/typeobj.rst:260 ../../c-api/typeobj.rst:262 #: ../../c-api/typeobj.rst:265 ../../c-api/typeobj.rst:267 #: ../../c-api/typeobj.rst:270 ../../c-api/typeobj.rst:272 #: ../../c-api/typeobj.rst:275 ../../c-api/typeobj.rst:283 #: ../../c-api/typeobj.rst:285 ../../c-api/typeobj.rst:287 #: ../../c-api/typeobj.rst:289 ../../c-api/typeobj.rst:293 #: ../../c-api/typeobj.rst:296 ../../c-api/typeobj.rst:302 #: ../../c-api/typeobj.rst:311 ../../c-api/typeobj.rst:322 #: ../../c-api/typeobj.rst:436 msgid ":c:type:`binaryfunc`" msgstr "" #: ../../c-api/typeobj.rst:214 msgid "__add__ __radd__" msgstr "" #: ../../c-api/typeobj.rst:217 msgid ":c:member:`~PyNumberMethods.nb_inplace_add`" msgstr "" #: ../../c-api/typeobj.rst:217 ../../c-api/typeobj.rst:322 msgid "__iadd__" msgstr "" #: ../../c-api/typeobj.rst:219 msgid ":c:member:`~PyNumberMethods.nb_subtract`" msgstr "" #: ../../c-api/typeobj.rst:219 msgid "__sub__ __rsub__" msgstr "" #: ../../c-api/typeobj.rst:222 msgid ":c:member:`~PyNumberMethods.nb_inplace_subtract`" msgstr "" #: ../../c-api/typeobj.rst:222 msgid "__isub__" msgstr "" #: ../../c-api/typeobj.rst:224 msgid ":c:member:`~PyNumberMethods.nb_multiply`" msgstr "" #: ../../c-api/typeobj.rst:224 msgid "__mul__ __rmul__" msgstr "" #: ../../c-api/typeobj.rst:227 msgid ":c:member:`~PyNumberMethods.nb_inplace_multiply`" msgstr "" #: ../../c-api/typeobj.rst:227 ../../c-api/typeobj.rst:324 msgid "__imul__" msgstr "" #: ../../c-api/typeobj.rst:229 msgid ":c:member:`~PyNumberMethods.nb_remainder`" msgstr "" #: ../../c-api/typeobj.rst:229 msgid "__mod__ __rmod__" msgstr "" #: ../../c-api/typeobj.rst:232 msgid ":c:member:`~PyNumberMethods.nb_inplace_remainder`" msgstr "" #: ../../c-api/typeobj.rst:232 msgid "__imod__" msgstr "" #: ../../c-api/typeobj.rst:234 msgid ":c:member:`~PyNumberMethods.nb_divmod`" msgstr "" #: ../../c-api/typeobj.rst:234 msgid "__divmod__ __rdivmod__" msgstr "" #: ../../c-api/typeobj.rst:237 msgid ":c:member:`~PyNumberMethods.nb_power`" msgstr "" #: ../../c-api/typeobj.rst:237 msgid "__pow__ __rpow__" msgstr "" #: ../../c-api/typeobj.rst:240 msgid ":c:member:`~PyNumberMethods.nb_inplace_power`" msgstr "" #: ../../c-api/typeobj.rst:240 msgid "__ipow__" msgstr "" #: ../../c-api/typeobj.rst:242 msgid ":c:member:`~PyNumberMethods.nb_negative`" msgstr "" #: ../../c-api/typeobj.rst:242 msgid "__neg__" msgstr "" #: ../../c-api/typeobj.rst:244 msgid ":c:member:`~PyNumberMethods.nb_positive`" msgstr "" #: ../../c-api/typeobj.rst:244 msgid "__pos__" msgstr "" #: ../../c-api/typeobj.rst:246 msgid ":c:member:`~PyNumberMethods.nb_absolute`" msgstr "" #: ../../c-api/typeobj.rst:246 msgid "__abs__" msgstr "" #: ../../c-api/typeobj.rst:248 msgid ":c:member:`~PyNumberMethods.nb_bool`" msgstr "" #: ../../c-api/typeobj.rst:248 msgid "__bool__" msgstr "" #: ../../c-api/typeobj.rst:250 msgid ":c:member:`~PyNumberMethods.nb_invert`" msgstr "" #: ../../c-api/typeobj.rst:250 msgid "__invert__" msgstr "" #: ../../c-api/typeobj.rst:252 msgid ":c:member:`~PyNumberMethods.nb_lshift`" msgstr "" #: ../../c-api/typeobj.rst:252 msgid "__lshift__ __rlshift__" msgstr "" #: ../../c-api/typeobj.rst:255 msgid ":c:member:`~PyNumberMethods.nb_inplace_lshift`" msgstr "" #: ../../c-api/typeobj.rst:255 msgid "__ilshift__" msgstr "" #: ../../c-api/typeobj.rst:257 msgid ":c:member:`~PyNumberMethods.nb_rshift`" msgstr "" #: ../../c-api/typeobj.rst:257 msgid "__rshift__ __rrshift__" msgstr "" #: ../../c-api/typeobj.rst:260 msgid ":c:member:`~PyNumberMethods.nb_inplace_rshift`" msgstr "" #: ../../c-api/typeobj.rst:260 msgid "__irshift__" msgstr "" #: ../../c-api/typeobj.rst:262 msgid ":c:member:`~PyNumberMethods.nb_and`" msgstr "" #: ../../c-api/typeobj.rst:262 msgid "__and__ __rand__" msgstr "" #: ../../c-api/typeobj.rst:265 msgid ":c:member:`~PyNumberMethods.nb_inplace_and`" msgstr "" #: ../../c-api/typeobj.rst:265 msgid "__iand__" msgstr "" #: ../../c-api/typeobj.rst:267 msgid ":c:member:`~PyNumberMethods.nb_xor`" msgstr "" #: ../../c-api/typeobj.rst:267 msgid "__xor__ __rxor__" msgstr "" #: ../../c-api/typeobj.rst:270 msgid ":c:member:`~PyNumberMethods.nb_inplace_xor`" msgstr "" #: ../../c-api/typeobj.rst:270 msgid "__ixor__" msgstr "" #: ../../c-api/typeobj.rst:272 msgid ":c:member:`~PyNumberMethods.nb_or`" msgstr "" #: ../../c-api/typeobj.rst:272 msgid "__or__ __ror__" msgstr "" #: ../../c-api/typeobj.rst:275 msgid ":c:member:`~PyNumberMethods.nb_inplace_or`" msgstr "" #: ../../c-api/typeobj.rst:275 msgid "__ior__" msgstr "" #: ../../c-api/typeobj.rst:277 msgid ":c:member:`~PyNumberMethods.nb_int`" msgstr "" #: ../../c-api/typeobj.rst:277 msgid "__int__" msgstr "" #: ../../c-api/typeobj.rst:279 msgid ":c:member:`~PyNumberMethods.nb_reserved`" msgstr "" #: ../../c-api/typeobj.rst:281 msgid ":c:member:`~PyNumberMethods.nb_float`" msgstr "" #: ../../c-api/typeobj.rst:281 msgid "__float__" msgstr "" #: ../../c-api/typeobj.rst:283 msgid ":c:member:`~PyNumberMethods.nb_floor_divide`" msgstr "" #: ../../c-api/typeobj.rst:283 msgid "__floordiv__" msgstr "" #: ../../c-api/typeobj.rst:285 msgid ":c:member:`~PyNumberMethods.nb_inplace_floor_divide`" msgstr "" #: ../../c-api/typeobj.rst:285 msgid "__ifloordiv__" msgstr "" #: ../../c-api/typeobj.rst:287 msgid ":c:member:`~PyNumberMethods.nb_true_divide`" msgstr "" #: ../../c-api/typeobj.rst:287 msgid "__truediv__" msgstr "" #: ../../c-api/typeobj.rst:289 msgid ":c:member:`~PyNumberMethods.nb_inplace_true_divide`" msgstr "" #: ../../c-api/typeobj.rst:289 msgid "__itruediv__" msgstr "" #: ../../c-api/typeobj.rst:291 msgid ":c:member:`~PyNumberMethods.nb_index`" msgstr "" #: ../../c-api/typeobj.rst:291 msgid "__index__" msgstr "" #: ../../c-api/typeobj.rst:293 msgid ":c:member:`~PyNumberMethods.nb_matrix_multiply`" msgstr "" #: ../../c-api/typeobj.rst:293 msgid "__matmul__ __rmatmul__" msgstr "" #: ../../c-api/typeobj.rst:296 msgid ":c:member:`~PyNumberMethods.nb_inplace_matrix_multiply`" msgstr "" #: ../../c-api/typeobj.rst:296 msgid "__imatmul__" msgstr "" #: ../../c-api/typeobj.rst:300 msgid ":c:member:`~PyMappingMethods.mp_length`" msgstr "" #: ../../c-api/typeobj.rst:300 ../../c-api/typeobj.rst:309 #: ../../c-api/typeobj.rst:417 msgid ":c:type:`lenfunc`" msgstr "" #: ../../c-api/typeobj.rst:300 ../../c-api/typeobj.rst:309 msgid "__len__" msgstr "" #: ../../c-api/typeobj.rst:302 msgid ":c:member:`~PyMappingMethods.mp_subscript`" msgstr "" #: ../../c-api/typeobj.rst:302 ../../c-api/typeobj.rst:315 msgid "__getitem__" msgstr "" #: ../../c-api/typeobj.rst:304 msgid ":c:member:`~PyMappingMethods.mp_ass_subscript`" msgstr "" #: ../../c-api/typeobj.rst:304 ../../c-api/typeobj.rst:463 msgid ":c:type:`objobjargproc`" msgstr "" #: ../../c-api/typeobj.rst:304 msgid "__setitem__, __delitem__" msgstr "" #: ../../c-api/typeobj.rst:309 msgid ":c:member:`~PySequenceMethods.sq_length`" msgstr "" #: ../../c-api/typeobj.rst:311 msgid ":c:member:`~PySequenceMethods.sq_concat`" msgstr "" #: ../../c-api/typeobj.rst:311 msgid "__add__" msgstr "" #: ../../c-api/typeobj.rst:313 msgid ":c:member:`~PySequenceMethods.sq_repeat`" msgstr "" #: ../../c-api/typeobj.rst:313 ../../c-api/typeobj.rst:315 #: ../../c-api/typeobj.rst:324 ../../c-api/typeobj.rst:447 msgid ":c:type:`ssizeargfunc`" msgstr "" #: ../../c-api/typeobj.rst:313 msgid "__mul__" msgstr "" #: ../../c-api/typeobj.rst:315 msgid ":c:member:`~PySequenceMethods.sq_item`" msgstr "" #: ../../c-api/typeobj.rst:317 msgid ":c:member:`~PySequenceMethods.sq_ass_item`" msgstr "" #: ../../c-api/typeobj.rst:317 ../../c-api/typeobj.rst:452 msgid ":c:type:`ssizeobjargproc`" msgstr "" #: ../../c-api/typeobj.rst:317 msgid "__setitem__ __delitem__" msgstr "" #: ../../c-api/typeobj.rst:320 msgid ":c:member:`~PySequenceMethods.sq_contains`" msgstr "" #: ../../c-api/typeobj.rst:320 ../../c-api/typeobj.rst:458 msgid ":c:type:`objobjproc`" msgstr "" #: ../../c-api/typeobj.rst:320 msgid "__contains__" msgstr "" #: ../../c-api/typeobj.rst:322 msgid ":c:member:`~PySequenceMethods.sq_inplace_concat`" msgstr "" #: ../../c-api/typeobj.rst:324 msgid ":c:member:`~PySequenceMethods.sq_inplace_repeat`" msgstr "" #: ../../c-api/typeobj.rst:328 msgid ":c:member:`~PyBufferProcs.bf_getbuffer`" msgstr "" #: ../../c-api/typeobj.rst:328 msgid ":c:func:`getbufferproc`" msgstr "" #: ../../c-api/typeobj.rst:328 msgid "__buffer__" msgstr "" #: ../../c-api/typeobj.rst:330 msgid ":c:member:`~PyBufferProcs.bf_releasebuffer`" msgstr "" #: ../../c-api/typeobj.rst:330 msgid ":c:func:`releasebufferproc`" msgstr "" #: ../../c-api/typeobj.rst:330 msgid "__release_ buffer\\__" msgstr "" #: ../../c-api/typeobj.rst:337 msgid "slot typedefs" msgstr "" #: ../../c-api/typeobj.rst:340 msgid "typedef" msgstr "" #: ../../c-api/typeobj.rst:340 msgid "Parameter Types" msgstr "" #: ../../c-api/typeobj.rst:340 msgid "Return Type" msgstr "" #: ../../c-api/typeobj.rst:347 ../../c-api/typeobj.rst:349 #: ../../c-api/typeobj.rst:425 msgid "void" msgstr "" #: ../../c-api/typeobj.rst:352 msgid ":c:type:`visitproc`" msgstr "" #: ../../c-api/typeobj.rst:351 ../../c-api/typeobj.rst:363 #: ../../c-api/typeobj.rst:376 ../../c-api/typeobj.rst:387 #: ../../c-api/typeobj.rst:399 ../../c-api/typeobj.rst:409 #: ../../c-api/typeobj.rst:419 ../../c-api/typeobj.rst:421 #: ../../c-api/typeobj.rst:430 ../../c-api/typeobj.rst:452 #: ../../c-api/typeobj.rst:458 ../../c-api/typeobj.rst:463 msgid "int" msgstr "" #: ../../c-api/typeobj.rst:405 msgid "Py_hash_t" msgstr "" #: ../../c-api/typeobj.rst:419 msgid ":c:type:`getbufferproc`" msgstr "" #: ../../c-api/typeobj.rst:420 ../../c-api/typeobj.rst:426 msgid ":c:type:`Py_buffer` *" msgstr "" #: ../../c-api/typeobj.rst:425 msgid ":c:type:`releasebufferproc`" msgstr "" #: ../../c-api/typeobj.rst:470 msgid "See :ref:`slot-typedefs` below for more detail." msgstr "" #: ../../c-api/typeobj.rst:474 msgid "PyTypeObject Definition" msgstr "" #: ../../c-api/typeobj.rst:476 msgid "" "The structure definition for :c:type:`PyTypeObject` can be found in :file:" "`Include/cpython/object.h`. For convenience of reference, this repeats the " "definition found there:" msgstr "" #: ../../c-api/typeobj.rst:482 msgid "" "typedef struct _typeobject {\n" " PyObject_VAR_HEAD\n" " const char *tp_name; /* For printing, in format \".\" */\n" " Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */\n" "\n" " /* Methods to implement standard operations */\n" "\n" " destructor tp_dealloc;\n" " Py_ssize_t tp_vectorcall_offset;\n" " getattrfunc tp_getattr;\n" " setattrfunc tp_setattr;\n" " PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)\n" " or tp_reserved (Python 3) */\n" " reprfunc tp_repr;\n" "\n" " /* Method suites for standard classes */\n" "\n" " PyNumberMethods *tp_as_number;\n" " PySequenceMethods *tp_as_sequence;\n" " PyMappingMethods *tp_as_mapping;\n" "\n" " /* More standard operations (here for binary compatibility) */\n" "\n" " hashfunc tp_hash;\n" " ternaryfunc tp_call;\n" " reprfunc tp_str;\n" " getattrofunc tp_getattro;\n" " setattrofunc tp_setattro;\n" "\n" " /* Functions to access object as input/output buffer */\n" " PyBufferProcs *tp_as_buffer;\n" "\n" " /* Flags to define presence of optional/expanded features */\n" " unsigned long tp_flags;\n" "\n" " const char *tp_doc; /* Documentation string */\n" "\n" " /* Assigned meaning in release 2.0 */\n" " /* call function for all accessible objects */\n" " traverseproc tp_traverse;\n" "\n" " /* delete references to contained objects */\n" " inquiry tp_clear;\n" "\n" " /* Assigned meaning in release 2.1 */\n" " /* rich comparisons */\n" " richcmpfunc tp_richcompare;\n" "\n" " /* weak reference enabler */\n" " Py_ssize_t tp_weaklistoffset;\n" "\n" " /* Iterators */\n" " getiterfunc tp_iter;\n" " iternextfunc tp_iternext;\n" "\n" " /* Attribute descriptor and subclassing stuff */\n" " PyMethodDef *tp_methods;\n" " PyMemberDef *tp_members;\n" " PyGetSetDef *tp_getset;\n" " // Strong reference on a heap type, borrowed reference on a static type\n" " PyTypeObject *tp_base;\n" " PyObject *tp_dict;\n" " descrgetfunc tp_descr_get;\n" " descrsetfunc tp_descr_set;\n" " Py_ssize_t tp_dictoffset;\n" " initproc tp_init;\n" " allocfunc tp_alloc;\n" " newfunc tp_new;\n" " freefunc tp_free; /* Low-level free-memory routine */\n" " inquiry tp_is_gc; /* For PyObject_IS_GC */\n" " PyObject *tp_bases;\n" " PyObject *tp_mro; /* method resolution order */\n" " PyObject *tp_cache; /* no longer used */\n" " void *tp_subclasses; /* for static builtin types this is an index */\n" " PyObject *tp_weaklist; /* not used for static builtin types */\n" " destructor tp_del;\n" "\n" " /* Type attribute cache version tag. Added in version 2.6.\n" " * If zero, the cache is invalid and must be initialized.\n" " */\n" " unsigned int tp_version_tag;\n" "\n" " destructor tp_finalize;\n" " vectorcallfunc tp_vectorcall;\n" "\n" " /* bitset of which type-watchers care about this type */\n" " unsigned char tp_watched;\n" "\n" " /* Number of tp_version_tag values used.\n" " * Set to _Py_ATTR_CACHE_UNUSED if the attribute cache is\n" " * disabled for this type (e.g. due to custom MRO entries).\n" " * Otherwise, limited to MAX_VERSIONS_PER_CLASS (defined elsewhere).\n" " */\n" " uint16_t tp_versions_used;\n" "} PyTypeObject;\n" msgstr "" #: ../../c-api/typeobj.rst:486 msgid "PyObject Slots" msgstr "" #: ../../c-api/typeobj.rst:488 msgid "" "The type object structure extends the :c:type:`PyVarObject` structure. The :" "c:member:`~PyVarObject.ob_size` field is used for dynamic types (created by :" "c:func:`!type_new`, usually called from a class statement). Note that :c:" "data:`PyType_Type` (the metatype) initializes :c:member:`~PyTypeObject." "tp_itemsize`, which means that its instances (i.e. type objects) *must* have " "the :c:member:`~PyVarObject.ob_size` field." msgstr "" #: ../../c-api/typeobj.rst:495 msgid ":c:member:`PyObject.ob_refcnt`" msgstr "" #: ../../c-api/typeobj.rst:497 msgid "" "The type object's reference count is initialized to ``1`` by the " "``PyObject_HEAD_INIT`` macro. Note that for :ref:`statically allocated type " "objects `, the type's instances (objects whose :c:member:" "`~PyObject.ob_type` points back to the type) do *not* count as references. " "But for :ref:`dynamically allocated type objects `, the " "instances *do* count as references." msgstr "" #: ../../c-api/typeobj.rst:504 ../../c-api/typeobj.rst:527 #: ../../c-api/typeobj.rst:543 ../../c-api/typeobj.rst:587 #: ../../c-api/typeobj.rst:665 ../../c-api/typeobj.rst:809 #: ../../c-api/typeobj.rst:854 ../../c-api/typeobj.rst:873 #: ../../c-api/typeobj.rst:892 ../../c-api/typeobj.rst:910 #: ../../c-api/typeobj.rst:936 ../../c-api/typeobj.rst:953 #: ../../c-api/typeobj.rst:965 ../../c-api/typeobj.rst:977 #: ../../c-api/typeobj.rst:1012 ../../c-api/typeobj.rst:1036 #: ../../c-api/typeobj.rst:1058 ../../c-api/typeobj.rst:1081 #: ../../c-api/typeobj.rst:1109 ../../c-api/typeobj.rst:1128 #: ../../c-api/typeobj.rst:1144 ../../c-api/typeobj.rst:1184 #: ../../c-api/typeobj.rst:1195 ../../c-api/typeobj.rst:1205 #: ../../c-api/typeobj.rst:1215 ../../c-api/typeobj.rst:1229 #: ../../c-api/typeobj.rst:1247 ../../c-api/typeobj.rst:1270 #: ../../c-api/typeobj.rst:1288 ../../c-api/typeobj.rst:1301 #: ../../c-api/typeobj.rst:1323 ../../c-api/typeobj.rst:1370 #: ../../c-api/typeobj.rst:1396 ../../c-api/typeobj.rst:1415 #: ../../c-api/typeobj.rst:1445 ../../c-api/typeobj.rst:1467 #: ../../c-api/typeobj.rst:1505 ../../c-api/typeobj.rst:1517 #: ../../c-api/typeobj.rst:1543 ../../c-api/typeobj.rst:1641 #: ../../c-api/typeobj.rst:1787 ../../c-api/typeobj.rst:1854 #: ../../c-api/typeobj.rst:1890 ../../c-api/typeobj.rst:1917 #: ../../c-api/typeobj.rst:1943 ../../c-api/typeobj.rst:1958 #: ../../c-api/typeobj.rst:1975 ../../c-api/typeobj.rst:1991 #: ../../c-api/typeobj.rst:2023 ../../c-api/typeobj.rst:2055 #: ../../c-api/typeobj.rst:2083 ../../c-api/typeobj.rst:2103 #: ../../c-api/typeobj.rst:2132 ../../c-api/typeobj.rst:2178 #: ../../c-api/typeobj.rst:2197 ../../c-api/typeobj.rst:2239 #: ../../c-api/typeobj.rst:2264 ../../c-api/typeobj.rst:2304 #: ../../c-api/typeobj.rst:2334 ../../c-api/typeobj.rst:2347 #: ../../c-api/typeobj.rst:2357 ../../c-api/typeobj.rst:2374 #: ../../c-api/typeobj.rst:2391 ../../c-api/typeobj.rst:2407 #: ../../c-api/typeobj.rst:2551 ../../c-api/typeobj.rst:2611 msgid "**Inheritance:**" msgstr "" #: ../../c-api/typeobj.rst:506 ../../c-api/typeobj.rst:545 #: ../../c-api/typeobj.rst:589 msgid "This field is not inherited by subtypes." msgstr "" #: ../../c-api/typeobj.rst:509 msgid ":c:member:`PyObject.ob_type`" msgstr "" #: ../../c-api/typeobj.rst:511 msgid "" "This is the type's type, in other words its metatype. It is initialized by " "the argument to the ``PyObject_HEAD_INIT`` macro, and its value should " "normally be ``&PyType_Type``. However, for dynamically loadable extension " "modules that must be usable on Windows (at least), the compiler complains " "that this is not a valid initializer. Therefore, the convention is to pass " "``NULL`` to the ``PyObject_HEAD_INIT`` macro and to initialize this field " "explicitly at the start of the module's initialization function, before " "doing anything else. This is typically done like this::" msgstr "" #: ../../c-api/typeobj.rst:520 msgid "Foo_Type.ob_type = &PyType_Type;" msgstr "" #: ../../c-api/typeobj.rst:522 msgid "" "This should be done before any instances of the type are created. :c:func:" "`PyType_Ready` checks if :c:member:`~PyObject.ob_type` is ``NULL``, and if " "so, initializes it to the :c:member:`~PyObject.ob_type` field of the base " "class. :c:func:`PyType_Ready` will not change this field if it is non-zero." msgstr "" #: ../../c-api/typeobj.rst:529 ../../c-api/typeobj.rst:811 #: ../../c-api/typeobj.rst:938 ../../c-api/typeobj.rst:1038 #: ../../c-api/typeobj.rst:1060 ../../c-api/typeobj.rst:1919 #: ../../c-api/typeobj.rst:1945 ../../c-api/typeobj.rst:2085 #: ../../c-api/typeobj.rst:2105 ../../c-api/typeobj.rst:2180 #: ../../c-api/typeobj.rst:2306 ../../c-api/typeobj.rst:2553 msgid "This field is inherited by subtypes." msgstr "" #: ../../c-api/typeobj.rst:533 msgid "PyVarObject Slots" msgstr "" #: ../../c-api/typeobj.rst:535 msgid ":c:member:`PyVarObject.ob_size`" msgstr "" #: ../../c-api/typeobj.rst:537 msgid "" "For :ref:`statically allocated type objects `, this should be " "initialized to zero. For :ref:`dynamically allocated type objects `, this field has a special internal meaning." msgstr "" #: ../../c-api/typeobj.rst:541 msgid "This field should be accessed using the :c:func:`Py_SIZE()` macro." msgstr "" #: ../../c-api/typeobj.rst:549 msgid "PyTypeObject Slots" msgstr "" #: ../../c-api/typeobj.rst:551 msgid "" "Each slot has a section describing inheritance. If :c:func:`PyType_Ready` " "may set a value when the field is set to ``NULL`` then there will also be a " "\"Default\" section. (Note that many fields set on :c:data:" "`PyBaseObject_Type` and :c:data:`PyType_Type` effectively act as defaults.)" msgstr "" #: ../../c-api/typeobj.rst:558 msgid "" "Pointer to a NUL-terminated string containing the name of the type. For " "types that are accessible as module globals, the string should be the full " "module name, followed by a dot, followed by the type name; for built-in " "types, it should be just the type name. If the module is a submodule of a " "package, the full package name is part of the full module name. For " "example, a type named :class:`!T` defined in module :mod:`!M` in subpackage :" "mod:`!Q` in package :mod:`!P` should have the :c:member:`~PyTypeObject." "tp_name` initializer ``\"P.Q.M.T\"``." msgstr "" #: ../../c-api/typeobj.rst:566 msgid "" "For :ref:`dynamically allocated type objects `, this should just " "be the type name, and the module name explicitly stored in the type dict as " "the value for key ``'__module__'``." msgstr "" #: ../../c-api/typeobj.rst:571 msgid "" "For :ref:`statically allocated type objects `, the *tp_name* " "field should contain a dot. Everything before the last dot is made " "accessible as the :attr:`~type.__module__` attribute, and everything after " "the last dot is made accessible as the :attr:`~type.__name__` attribute." msgstr "" #: ../../c-api/typeobj.rst:577 msgid "" "If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is " "made accessible as the :attr:`~type.__name__` attribute, and the :attr:" "`~type.__module__` attribute is undefined (unless explicitly set in the " "dictionary, as explained above). This means your type will be impossible to " "pickle. Additionally, it will not be listed in module documentations " "created with pydoc." msgstr "" #: ../../c-api/typeobj.rst:583 msgid "" "This field must not be ``NULL``. It is the only required field in :c:func:" "`PyTypeObject` (other than potentially :c:member:`~PyTypeObject." "tp_itemsize`)." msgstr "" #: ../../c-api/typeobj.rst:595 msgid "" "These fields allow calculating the size in bytes of instances of the type." msgstr "" #: ../../c-api/typeobj.rst:597 msgid "" "There are two kinds of types: types with fixed-length instances have a zero :" "c:member:`!tp_itemsize` field, types with variable-length instances have a " "non-zero :c:member:`!tp_itemsize` field. For a type with fixed-length " "instances, all instances have the same size, given in :c:member:`!" "tp_basicsize`. (Exceptions to this rule can be made using :c:func:" "`PyUnstable_Object_GC_NewWithExtraData`.)" msgstr "" #: ../../c-api/typeobj.rst:604 msgid "" "For a type with variable-length instances, the instances must have an :c:" "member:`~PyVarObject.ob_size` field, and the instance size is :c:member:`!" "tp_basicsize` plus N times :c:member:`!tp_itemsize`, where N is the " "\"length\" of the object." msgstr "" #: ../../c-api/typeobj.rst:609 msgid "" "Functions like :c:func:`PyObject_NewVar` will take the value of N as an " "argument, and store in the instance's :c:member:`~PyVarObject.ob_size` " "field. Note that the :c:member:`~PyVarObject.ob_size` field may later be " "used for other purposes. For example, :py:type:`int` instances use the bits " "of :c:member:`~PyVarObject.ob_size` in an implementation-defined way; the " "underlying storage and its size should be accessed using :c:func:" "`PyLong_Export`." msgstr "" #: ../../c-api/typeobj.rst:619 msgid "" "The :c:member:`~PyVarObject.ob_size` field should be accessed using the :c:" "func:`Py_SIZE()` and :c:func:`Py_SET_SIZE()` macros." msgstr "" #: ../../c-api/typeobj.rst:622 msgid "" "Also, the presence of an :c:member:`~PyVarObject.ob_size` field in the " "instance layout doesn't mean that the instance structure is variable-length. " "For example, the :py:type:`list` type has fixed-length instances, yet those " "instances have a :c:member:`~PyVarObject.ob_size` field. (As with :py:type:" "`int`, avoid reading lists' :c:member:`!ob_size` directly. Call :c:func:" "`PyList_Size` instead.)" msgstr "" #: ../../c-api/typeobj.rst:629 msgid "" "The :c:member:`!tp_basicsize` includes size needed for data of the type's :c:" "member:`~PyTypeObject.tp_base`, plus any extra data needed by each instance." msgstr "" #: ../../c-api/typeobj.rst:633 msgid "" "The correct way to set :c:member:`!tp_basicsize` is to use the ``sizeof`` " "operator on the struct used to declare the instance layout. This struct must " "include the struct used to declare the base type. In other words, :c:member:" "`!tp_basicsize` must be greater than or equal to the base's :c:member:`!" "tp_basicsize`." msgstr "" #: ../../c-api/typeobj.rst:639 msgid "" "Since every type is a subtype of :py:type:`object`, this struct must " "include :c:type:`PyObject` or :c:type:`PyVarObject` (depending on whether :c:" "member:`~PyVarObject.ob_size` should be included). These are usually defined " "by the macro :c:macro:`PyObject_HEAD` or :c:macro:`PyObject_VAR_HEAD`, " "respectively." msgstr "" #: ../../c-api/typeobj.rst:645 msgid "" "The basic size does not include the GC header size, as that header is not " "part of :c:macro:`PyObject_HEAD`." msgstr "" #: ../../c-api/typeobj.rst:648 msgid "" "For cases where struct used to declare the base type is unknown, see :c:" "member:`PyType_Spec.basicsize` and :c:func:`PyType_FromMetaclass`." msgstr "" #: ../../c-api/typeobj.rst:651 msgid "Notes about alignment:" msgstr "" #: ../../c-api/typeobj.rst:653 msgid "" ":c:member:`!tp_basicsize` must be a multiple of ``_Alignof(PyObject)``. When " "using ``sizeof`` on a ``struct`` that includes :c:macro:`PyObject_HEAD`, as " "recommended, the compiler ensures this. When not using a C ``struct``, or " "when using compiler extensions like ``__attribute__((packed))``, it is up to " "you." msgstr "" #: ../../c-api/typeobj.rst:658 msgid "" "If the variable items require a particular alignment, :c:member:`!" "tp_basicsize` and :c:member:`!tp_itemsize` must each be a multiple of that " "alignment. For example, if a type's variable part stores a ``double``, it is " "your responsibility that both fields are a multiple of ``_Alignof(double)``." msgstr "" #: ../../c-api/typeobj.rst:667 msgid "" "These fields are inherited separately by subtypes. (That is, if the field is " "set to zero, :c:func:`PyType_Ready` will copy the value from the base type, " "indicating that the instances do not need additional storage.)" msgstr "" #: ../../c-api/typeobj.rst:672 msgid "" "If the base type has a non-zero :c:member:`~PyTypeObject.tp_itemsize`, it is " "generally not safe to set :c:member:`~PyTypeObject.tp_itemsize` to a " "different non-zero value in a subtype (though this depends on the " "implementation of the base type)." msgstr "" #: ../../c-api/typeobj.rst:681 msgid "" "A pointer to the instance destructor function. The function signature is::" msgstr "" #: ../../c-api/typeobj.rst:683 msgid "void tp_dealloc(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:685 msgid "" "The destructor function should remove all references which the instance owns " "(e.g., call :c:func:`Py_CLEAR`), free all memory buffers owned by the " "instance, and call the type's :c:member:`~PyTypeObject.tp_free` function to " "free the object itself." msgstr "" #: ../../c-api/typeobj.rst:690 msgid "" "If you may call functions that may set the error indicator, you must use :c:" "func:`PyErr_GetRaisedException` and :c:func:`PyErr_SetRaisedException` to " "ensure you don't clobber a preexisting error indicator (the deallocation " "could have occurred while processing a different error):" msgstr "" #: ../../c-api/typeobj.rst:695 msgid "" "static void\n" "foo_dealloc(foo_object *self)\n" "{\n" " PyObject *et, *ev, *etb;\n" " PyObject *exc = PyErr_GetRaisedException();\n" " ...\n" " PyErr_SetRaisedException(exc);\n" "}" msgstr "" #: ../../c-api/typeobj.rst:706 msgid "" "The dealloc handler itself must not raise an exception; if it hits an error " "case it should call :c:func:`PyErr_FormatUnraisable` to log (and clear) an " "unraisable exception." msgstr "" #: ../../c-api/typeobj.rst:710 msgid "No guarantees are made about when an object is destroyed, except:" msgstr "" #: ../../c-api/typeobj.rst:712 msgid "" "Python will destroy an object immediately or some time after the final " "reference to the object is deleted, unless its finalizer (:c:member:" "`~PyTypeObject.tp_finalize`) subsequently resurrects the object." msgstr "" #: ../../c-api/typeobj.rst:716 msgid "" "An object will not be destroyed while it is being automatically finalized (:" "c:member:`~PyTypeObject.tp_finalize`) or automatically cleared (:c:member:" "`~PyTypeObject.tp_clear`)." msgstr "" #: ../../c-api/typeobj.rst:720 msgid "" "CPython currently destroys an object immediately from :c:func:`Py_DECREF` " "when the new reference count is zero, but this may change in a future " "version." msgstr "" #: ../../c-api/typeobj.rst:724 msgid "" "It is recommended to call :c:func:`PyObject_CallFinalizerFromDealloc` at the " "beginning of :c:member:`!tp_dealloc` to guarantee that the object is always " "finalized before destruction." msgstr "" #: ../../c-api/typeobj.rst:728 msgid "" "If the type supports garbage collection (the :c:macro:`Py_TPFLAGS_HAVE_GC` " "flag is set), the destructor should call :c:func:`PyObject_GC_UnTrack` " "before clearing any member fields." msgstr "" #: ../../c-api/typeobj.rst:732 msgid "" "It is permissible to call :c:member:`~PyTypeObject.tp_clear` from :c:member:" "`!tp_dealloc` to reduce code duplication and to guarantee that the object is " "always cleared before destruction. Beware that :c:member:`!tp_clear` might " "have already been called." msgstr "" #: ../../c-api/typeobj.rst:737 msgid "" "If the type is heap allocated (:c:macro:`Py_TPFLAGS_HEAPTYPE`), the " "deallocator should release the owned reference to its type object (via :c:" "func:`Py_DECREF`) after calling the type deallocator. See the example code " "below.::" msgstr "" #: ../../c-api/typeobj.rst:742 msgid "" "static void\n" "foo_dealloc(PyObject *op)\n" "{\n" " foo_object *self = (foo_object *) op;\n" " PyObject_GC_UnTrack(self);\n" " Py_CLEAR(self->ref);\n" " Py_TYPE(self)->tp_free(self);\n" "}" msgstr "" #: ../../c-api/typeobj.rst:751 msgid "" ":c:member:`!tp_dealloc` must leave the exception status unchanged. If it " "needs to call something that might raise an exception, the exception state " "must be backed up first and restored later (after logging any exceptions " "with :c:func:`PyErr_WriteUnraisable`)." msgstr "" #: ../../c-api/typeobj.rst:756 msgid "Example::" msgstr "" #: ../../c-api/typeobj.rst:758 msgid "" "static void\n" "foo_dealloc(PyObject *self)\n" "{\n" " PyObject *exc = PyErr_GetRaisedException();\n" "\n" " if (PyObject_CallFinalizerFromDealloc(self) < 0) {\n" " // self was resurrected.\n" " goto done;\n" " }\n" "\n" " PyTypeObject *tp = Py_TYPE(self);\n" "\n" " if (tp->tp_flags & Py_TPFLAGS_HAVE_GC) {\n" " PyObject_GC_UnTrack(self);\n" " }\n" "\n" " // Optional, but convenient to avoid code duplication.\n" " if (tp->tp_clear && tp->tp_clear(self) < 0) {\n" " PyErr_WriteUnraisable(self);\n" " }\n" "\n" " // Any additional destruction goes here.\n" "\n" " tp->tp_free(self);\n" " self = NULL; // In case PyErr_WriteUnraisable() is called below.\n" "\n" " if (tp->tp_flags & Py_TPFLAGS_HEAPTYPE) {\n" " Py_CLEAR(tp);\n" " }\n" "\n" "done:\n" " // Optional, if something was called that might have raised an\n" " // exception.\n" " if (PyErr_Occurred()) {\n" " PyErr_WriteUnraisable(self);\n" " }\n" " PyErr_SetRaisedException(exc);\n" "}" msgstr "" #: ../../c-api/typeobj.rst:797 msgid "" ":c:member:`!tp_dealloc` may be called from any Python thread, not just the " "thread which created the object (if the object becomes part of a refcount " "cycle, that cycle might be collected by a garbage collection on any " "thread). This is not a problem for Python API calls, since the thread on " "which :c:member:`!tp_dealloc` is called with an :term:`attached thread " "state`. However, if the object being destroyed in turn destroys objects " "from some other C library, care should be taken to ensure that destroying " "those objects on the thread which called :c:member:`!tp_dealloc` will not " "violate any assumptions of the library." msgstr "" #: ../../c-api/typeobj.rst:815 ../../c-api/typeobj.rst:1798 #: ../../c-api/typeobj.rst:2566 msgid "" ":ref:`life-cycle` for details about how this slot relates to other slots." msgstr "" #: ../../c-api/typeobj.rst:820 msgid "" "An optional offset to a per-instance function that implements calling the " "object using the :ref:`vectorcall protocol `, a more efficient " "alternative of the simpler :c:member:`~PyTypeObject.tp_call`." msgstr "" #: ../../c-api/typeobj.rst:825 msgid "" "This field is only used if the flag :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` is " "set. If so, this must be a positive integer containing the offset in the " "instance of a :c:type:`vectorcallfunc` pointer." msgstr "" #: ../../c-api/typeobj.rst:829 msgid "" "The *vectorcallfunc* pointer may be ``NULL``, in which case the instance " "behaves as if :c:macro:`Py_TPFLAGS_HAVE_VECTORCALL` was not set: calling the " "instance falls back to :c:member:`~PyTypeObject.tp_call`." msgstr "" #: ../../c-api/typeobj.rst:833 msgid "" "Any class that sets ``Py_TPFLAGS_HAVE_VECTORCALL`` must also set :c:member:" "`~PyTypeObject.tp_call` and make sure its behaviour is consistent with the " "*vectorcallfunc* function. This can be done by setting *tp_call* to :c:func:" "`PyVectorcall_Call`." msgstr "" #: ../../c-api/typeobj.rst:840 msgid "" "Before version 3.8, this slot was named ``tp_print``. In Python 2.x, it was " "used for printing to a file. In Python 3.0 to 3.7, it was unused." msgstr "" #: ../../c-api/typeobj.rst:846 msgid "" "Before version 3.12, it was not recommended for :ref:`mutable heap types " "` to implement the vectorcall protocol. When a user sets :attr:" "`~object.__call__` in Python code, only *tp_call* is updated, likely making " "it inconsistent with the vectorcall function. Since 3.12, setting " "``__call__`` will disable vectorcall optimization by clearing the :c:macro:" "`Py_TPFLAGS_HAVE_VECTORCALL` flag." msgstr "" #: ../../c-api/typeobj.rst:856 msgid "" "This field is always inherited. However, the :c:macro:" "`Py_TPFLAGS_HAVE_VECTORCALL` flag is not always inherited. If it's not set, " "then the subclass won't use :ref:`vectorcall `, except when :c:" "func:`PyVectorcall_Call` is explicitly called." msgstr "" #: ../../c-api/typeobj.rst:867 msgid "An optional pointer to the get-attribute-string function." msgstr "" #: ../../c-api/typeobj.rst:869 msgid "" "This field is deprecated. When it is defined, it should point to a function " "that acts the same as the :c:member:`~PyTypeObject.tp_getattro` function, " "but taking a C string instead of a Python string object to give the " "attribute name." msgstr "" #: ../../c-api/typeobj.rst:875 ../../c-api/typeobj.rst:1083 msgid "" "Group: :c:member:`~PyTypeObject.tp_getattr`, :c:member:`~PyTypeObject." "tp_getattro`" msgstr "" #: ../../c-api/typeobj.rst:877 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_getattro`: a subtype inherits both :c:member:`~PyTypeObject.tp_getattr` " "and :c:member:`~PyTypeObject.tp_getattro` from its base type when the " "subtype's :c:member:`~PyTypeObject.tp_getattr` and :c:member:`~PyTypeObject." "tp_getattro` are both ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:886 ../../c-api/typeobj.rst:1098 msgid "" "An optional pointer to the function for setting and deleting attributes." msgstr "" #: ../../c-api/typeobj.rst:888 msgid "" "This field is deprecated. When it is defined, it should point to a function " "that acts the same as the :c:member:`~PyTypeObject.tp_setattro` function, " "but taking a C string instead of a Python string object to give the " "attribute name." msgstr "" #: ../../c-api/typeobj.rst:894 ../../c-api/typeobj.rst:1111 msgid "" "Group: :c:member:`~PyTypeObject.tp_setattr`, :c:member:`~PyTypeObject." "tp_setattro`" msgstr "" #: ../../c-api/typeobj.rst:896 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_setattro`: a subtype inherits both :c:member:`~PyTypeObject.tp_setattr` " "and :c:member:`~PyTypeObject.tp_setattro` from its base type when the " "subtype's :c:member:`~PyTypeObject.tp_setattr` and :c:member:`~PyTypeObject." "tp_setattro` are both ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:903 msgid "" "Pointer to an additional structure that contains fields relevant only to " "objects which implement :term:`awaitable` and :term:`asynchronous iterator` " "protocols at the C-level. See :ref:`async-structs` for details." msgstr "" #: ../../c-api/typeobj.rst:907 msgid "Formerly known as ``tp_compare`` and ``tp_reserved``." msgstr "" #: ../../c-api/typeobj.rst:912 msgid "" "The :c:member:`~PyTypeObject.tp_as_async` field is not inherited, but the " "contained fields are inherited individually." msgstr "" #: ../../c-api/typeobj.rst:922 msgid "" "An optional pointer to a function that implements the built-in function :" "func:`repr`." msgstr "" #: ../../c-api/typeobj.rst:925 msgid "The signature is the same as for :c:func:`PyObject_Repr`::" msgstr "" #: ../../c-api/typeobj.rst:927 msgid "PyObject *tp_repr(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:929 msgid "" "The function must return a string or a Unicode object. Ideally, this " "function should return a string that, when passed to :func:`eval`, given a " "suitable environment, returns an object with the same value. If this is not " "feasible, it should return a string starting with ``'<'`` and ending with " "``'>'`` from which both the type and the value of the object can be deduced." msgstr "" #: ../../c-api/typeobj.rst:940 ../../c-api/typeobj.rst:1021 #: ../../c-api/typeobj.rst:1062 ../../c-api/typeobj.rst:1089 #: ../../c-api/typeobj.rst:1117 ../../c-api/typeobj.rst:1159 #: ../../c-api/typeobj.rst:1863 ../../c-api/typeobj.rst:1897 #: ../../c-api/typeobj.rst:2027 ../../c-api/typeobj.rst:2060 #: ../../c-api/typeobj.rst:2139 ../../c-api/typeobj.rst:2182 #: ../../c-api/typeobj.rst:2204 ../../c-api/typeobj.rst:2245 #: ../../c-api/typeobj.rst:2275 ../../c-api/typeobj.rst:2308 msgid "**Default:**" msgstr "" #: ../../c-api/typeobj.rst:942 msgid "" "When this field is not set, a string of the form ``<%s object at %p>`` is " "returned, where ``%s`` is replaced by the type name, and ``%p`` by the " "object's memory address." msgstr "" #: ../../c-api/typeobj.rst:949 msgid "" "Pointer to an additional structure that contains fields relevant only to " "objects which implement the number protocol. These fields are documented " "in :ref:`number-structs`." msgstr "" #: ../../c-api/typeobj.rst:955 msgid "" "The :c:member:`~PyTypeObject.tp_as_number` field is not inherited, but the " "contained fields are inherited individually." msgstr "" #: ../../c-api/typeobj.rst:961 msgid "" "Pointer to an additional structure that contains fields relevant only to " "objects which implement the sequence protocol. These fields are documented " "in :ref:`sequence-structs`." msgstr "" #: ../../c-api/typeobj.rst:967 msgid "" "The :c:member:`~PyTypeObject.tp_as_sequence` field is not inherited, but the " "contained fields are inherited individually." msgstr "" #: ../../c-api/typeobj.rst:973 msgid "" "Pointer to an additional structure that contains fields relevant only to " "objects which implement the mapping protocol. These fields are documented " "in :ref:`mapping-structs`." msgstr "" #: ../../c-api/typeobj.rst:979 msgid "" "The :c:member:`~PyTypeObject.tp_as_mapping` field is not inherited, but the " "contained fields are inherited individually." msgstr "" #: ../../c-api/typeobj.rst:989 msgid "" "An optional pointer to a function that implements the built-in function :" "func:`hash`." msgstr "" #: ../../c-api/typeobj.rst:992 msgid "The signature is the same as for :c:func:`PyObject_Hash`::" msgstr "" #: ../../c-api/typeobj.rst:994 msgid "Py_hash_t tp_hash(PyObject *);" msgstr "" #: ../../c-api/typeobj.rst:996 msgid "" "The value ``-1`` should not be returned as a normal return value; when an " "error occurs during the computation of the hash value, the function should " "set an exception and return ``-1``." msgstr "" #: ../../c-api/typeobj.rst:1000 msgid "" "When this field is not set (*and* :c:member:`~PyTypeObject.tp_richcompare` " "is not set), an attempt to take the hash of the object raises :exc:" "`TypeError`. This is the same as setting it to :c:func:" "`PyObject_HashNotImplemented`." msgstr "" #: ../../c-api/typeobj.rst:1004 msgid "" "This field can be set explicitly to :c:func:`PyObject_HashNotImplemented` to " "block inheritance of the hash method from a parent type. This is interpreted " "as the equivalent of ``__hash__ = None`` at the Python level, causing " "``isinstance(o, collections.Hashable)`` to correctly return ``False``. Note " "that the converse is also true - setting ``__hash__ = None`` on a class at " "the Python level will result in the ``tp_hash`` slot being set to :c:func:" "`PyObject_HashNotImplemented`." msgstr "" #: ../../c-api/typeobj.rst:1014 ../../c-api/typeobj.rst:1856 msgid "" "Group: :c:member:`~PyTypeObject.tp_hash`, :c:member:`~PyTypeObject." "tp_richcompare`" msgstr "" #: ../../c-api/typeobj.rst:1016 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_richcompare`: a subtype inherits both of :c:member:`~PyTypeObject." "tp_richcompare` and :c:member:`~PyTypeObject.tp_hash`, when the subtype's :c:" "member:`~PyTypeObject.tp_richcompare` and :c:member:`~PyTypeObject.tp_hash` " "are both ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:1023 msgid ":c:data:`PyBaseObject_Type` uses :c:func:`PyObject_GenericHash`." msgstr "" #: ../../c-api/typeobj.rst:1030 msgid "" "An optional pointer to a function that implements calling the object. This " "should be ``NULL`` if the object is not callable. The signature is the same " "as for :c:func:`PyObject_Call`::" msgstr "" #: ../../c-api/typeobj.rst:1034 msgid "PyObject *tp_call(PyObject *self, PyObject *args, PyObject *kwargs);" msgstr "" #: ../../c-api/typeobj.rst:1045 msgid "" "An optional pointer to a function that implements the built-in operation :" "func:`str`. (Note that :class:`str` is a type now, and :func:`str` calls " "the constructor for that type. This constructor calls :c:func:" "`PyObject_Str` to do the actual work, and :c:func:`PyObject_Str` will call " "this handler.)" msgstr "" #: ../../c-api/typeobj.rst:1050 msgid "The signature is the same as for :c:func:`PyObject_Str`::" msgstr "" #: ../../c-api/typeobj.rst:1052 msgid "PyObject *tp_str(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:1054 msgid "" "The function must return a string or a Unicode object. It should be a " "\"friendly\" string representation of the object, as this is the " "representation that will be used, among other things, by the :func:`print` " "function." msgstr "" #: ../../c-api/typeobj.rst:1064 msgid "" "When this field is not set, :c:func:`PyObject_Repr` is called to return a " "string representation." msgstr "" #: ../../c-api/typeobj.rst:1072 msgid "An optional pointer to the get-attribute function." msgstr "" #: ../../c-api/typeobj.rst:1074 msgid "The signature is the same as for :c:func:`PyObject_GetAttr`::" msgstr "" #: ../../c-api/typeobj.rst:1076 msgid "PyObject *tp_getattro(PyObject *self, PyObject *attr);" msgstr "" #: ../../c-api/typeobj.rst:1078 msgid "" "It is usually convenient to set this field to :c:func:" "`PyObject_GenericGetAttr`, which implements the normal way of looking for " "object attributes." msgstr "" #: ../../c-api/typeobj.rst:1085 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_getattr`: a subtype inherits both :c:member:`~PyTypeObject.tp_getattr` " "and :c:member:`~PyTypeObject.tp_getattro` from its base type when the " "subtype's :c:member:`~PyTypeObject.tp_getattr` and :c:member:`~PyTypeObject." "tp_getattro` are both ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:1091 msgid ":c:data:`PyBaseObject_Type` uses :c:func:`PyObject_GenericGetAttr`." msgstr "" #: ../../c-api/typeobj.rst:1100 msgid "The signature is the same as for :c:func:`PyObject_SetAttr`::" msgstr "" #: ../../c-api/typeobj.rst:1102 msgid "int tp_setattro(PyObject *self, PyObject *attr, PyObject *value);" msgstr "" #: ../../c-api/typeobj.rst:1104 msgid "" "In addition, setting *value* to ``NULL`` to delete an attribute must be " "supported. It is usually convenient to set this field to :c:func:" "`PyObject_GenericSetAttr`, which implements the normal way of setting object " "attributes." msgstr "" #: ../../c-api/typeobj.rst:1113 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_setattr`: a subtype inherits both :c:member:`~PyTypeObject.tp_setattr` " "and :c:member:`~PyTypeObject.tp_setattro` from its base type when the " "subtype's :c:member:`~PyTypeObject.tp_setattr` and :c:member:`~PyTypeObject." "tp_setattro` are both ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:1119 msgid ":c:data:`PyBaseObject_Type` uses :c:func:`PyObject_GenericSetAttr`." msgstr "" #: ../../c-api/typeobj.rst:1124 msgid "" "Pointer to an additional structure that contains fields relevant only to " "objects which implement the buffer interface. These fields are documented " "in :ref:`buffer-structs`." msgstr "" #: ../../c-api/typeobj.rst:1130 msgid "" "The :c:member:`~PyTypeObject.tp_as_buffer` field is not inherited, but the " "contained fields are inherited individually." msgstr "" #: ../../c-api/typeobj.rst:1136 msgid "" "This field is a bit mask of various flags. Some flags indicate variant " "semantics for certain situations; others are used to indicate that certain " "fields in the type object (or in the extension structures referenced via :c:" "member:`~PyTypeObject.tp_as_number`, :c:member:`~PyTypeObject." "tp_as_sequence`, :c:member:`~PyTypeObject.tp_as_mapping`, and :c:member:" "`~PyTypeObject.tp_as_buffer`) that were historically not always present are " "valid; if such a flag bit is clear, the type fields it guards must not be " "accessed and must be considered to have a zero or ``NULL`` value instead." msgstr "" #: ../../c-api/typeobj.rst:1146 msgid "" "Inheritance of this field is complicated. Most flag bits are inherited " "individually, i.e. if the base type has a flag bit set, the subtype inherits " "this flag bit. The flag bits that pertain to extension structures are " "strictly inherited if the extension structure is inherited, i.e. the base " "type's value of the flag bit is copied into the subtype together with a " "pointer to the extension structure. The :c:macro:`Py_TPFLAGS_HAVE_GC` flag " "bit is inherited together with the :c:member:`~PyTypeObject.tp_traverse` " "and :c:member:`~PyTypeObject.tp_clear` fields, i.e. if the :c:macro:" "`Py_TPFLAGS_HAVE_GC` flag bit is clear in the subtype and the :c:member:" "`~PyTypeObject.tp_traverse` and :c:member:`~PyTypeObject.tp_clear` fields in " "the subtype exist and have ``NULL`` values." msgstr "" #: ../../c-api/typeobj.rst:1161 msgid "" ":c:data:`PyBaseObject_Type` uses ``Py_TPFLAGS_DEFAULT | " "Py_TPFLAGS_BASETYPE``." msgstr "" #: ../../c-api/typeobj.rst:1164 msgid "**Bit Masks:**" msgstr "" #: ../../c-api/typeobj.rst:1168 msgid "" "The following bit masks are currently defined; these can be ORed together " "using the ``|`` operator to form the value of the :c:member:`~PyTypeObject." "tp_flags` field. The macro :c:func:`PyType_HasFeature` takes a type and a " "flags value, *tp* and *f*, and checks whether ``tp->tp_flags & f`` is non-" "zero." msgstr "" #: ../../c-api/typeobj.rst:1175 msgid "" "This bit is set when the type object itself is allocated on the heap, for " "example, types created dynamically using :c:func:`PyType_FromSpec`. In this " "case, the :c:member:`~PyObject.ob_type` field of its instances is considered " "a reference to the type, and the type object is INCREF'ed when a new " "instance is created, and DECREF'ed when an instance is destroyed (this does " "not apply to instances of subtypes; only the type referenced by the " "instance's ob_type gets INCREF'ed or DECREF'ed). Heap types should also :ref:" "`support garbage collection ` as they can form a " "reference cycle with their own module object." msgstr "" #: ../../c-api/typeobj.rst:1186 ../../c-api/typeobj.rst:1197 #: ../../c-api/typeobj.rst:1207 ../../c-api/typeobj.rst:1217 #: ../../c-api/typeobj.rst:1249 msgid "???" msgstr "" #: ../../c-api/typeobj.rst:1191 msgid "" "This bit is set when the type can be used as the base type of another type. " "If this bit is clear, the type cannot be subtyped (similar to a \"final\" " "class in Java)." msgstr "" #: ../../c-api/typeobj.rst:1202 msgid "" "This bit is set when the type object has been fully initialized by :c:func:" "`PyType_Ready`." msgstr "" #: ../../c-api/typeobj.rst:1212 msgid "" "This bit is set while :c:func:`PyType_Ready` is in the process of " "initializing the type object." msgstr "" #: ../../c-api/typeobj.rst:1222 msgid "" "This bit is set when the object supports garbage collection. If this bit is " "set, memory for new instances (see :c:member:`~PyTypeObject.tp_alloc`) must " "be allocated using :c:macro:`PyObject_GC_New` or :c:func:" "`PyType_GenericAlloc` and deallocated (see :c:member:`~PyTypeObject." "tp_free`) using :c:func:`PyObject_GC_Del`. More information in section :ref:" "`supporting-cycle-detection`." msgstr "" #: ../../c-api/typeobj.rst:1231 ../../c-api/typeobj.rst:1643 #: ../../c-api/typeobj.rst:1789 msgid "" "Group: :c:macro:`Py_TPFLAGS_HAVE_GC`, :c:member:`~PyTypeObject." "tp_traverse`, :c:member:`~PyTypeObject.tp_clear`" msgstr "" #: ../../c-api/typeobj.rst:1233 msgid "" "The :c:macro:`Py_TPFLAGS_HAVE_GC` flag bit is inherited together with the :c:" "member:`~PyTypeObject.tp_traverse` and :c:member:`~PyTypeObject.tp_clear` " "fields, i.e. if the :c:macro:`Py_TPFLAGS_HAVE_GC` flag bit is clear in the " "subtype and the :c:member:`~PyTypeObject.tp_traverse` and :c:member:" "`~PyTypeObject.tp_clear` fields in the subtype exist and have ``NULL`` " "values." msgstr "" #: ../../c-api/typeobj.rst:1243 msgid "" "This is a bitmask of all the bits that pertain to the existence of certain " "fields in the type object and its extension structures. Currently, it " "includes the following bits: :c:macro:`Py_TPFLAGS_HAVE_STACKLESS_EXTENSION`." msgstr "" #: ../../c-api/typeobj.rst:1254 msgid "This bit indicates that objects behave like unbound methods." msgstr "" #: ../../c-api/typeobj.rst:1256 msgid "If this flag is set for ``type(meth)``, then:" msgstr "" #: ../../c-api/typeobj.rst:1258 msgid "" "``meth.__get__(obj, cls)(*args, **kwds)`` (with ``obj`` not None) must be " "equivalent to ``meth(obj, *args, **kwds)``." msgstr "" #: ../../c-api/typeobj.rst:1261 msgid "" "``meth.__get__(None, cls)(*args, **kwds)`` must be equivalent to " "``meth(*args, **kwds)``." msgstr "" #: ../../c-api/typeobj.rst:1264 msgid "" "This flag enables an optimization for typical method calls like ``obj." "meth()``: it avoids creating a temporary \"bound method\" object for ``obj." "meth``." msgstr "" #: ../../c-api/typeobj.rst:1272 msgid "" "This flag is never inherited by types without the :c:macro:" "`Py_TPFLAGS_IMMUTABLETYPE` flag set. For extension types, it is inherited " "whenever :c:member:`~PyTypeObject.tp_descr_get` is inherited." msgstr "" #: ../../c-api/typeobj.rst:1278 msgid "" "This bit indicates that instances of the class have a :attr:`~object." "__dict__` attribute, and that the space for the dictionary is managed by the " "VM." msgstr "" #: ../../c-api/typeobj.rst:1281 msgid "If this flag is set, :c:macro:`Py_TPFLAGS_HAVE_GC` should also be set." msgstr "" #: ../../c-api/typeobj.rst:1283 msgid "" "The type traverse function must call :c:func:`PyObject_VisitManagedDict` and " "its clear function must call :c:func:`PyObject_ClearManagedDict`." msgstr "" #: ../../c-api/typeobj.rst:1290 msgid "" "This flag is inherited unless the :c:member:`~PyTypeObject.tp_dictoffset` " "field is set in a superclass." msgstr "" #: ../../c-api/typeobj.rst:1296 msgid "" "This bit indicates that instances of the class should be weakly " "referenceable." msgstr "" #: ../../c-api/typeobj.rst:1303 msgid "" "This flag is inherited unless the :c:member:`~PyTypeObject." "tp_weaklistoffset` field is set in a superclass." msgstr "" #: ../../c-api/typeobj.rst:1309 msgid "" "Only usable with variable-size types, i.e. ones with non-zero :c:member:" "`~PyTypeObject.tp_itemsize`." msgstr "" #: ../../c-api/typeobj.rst:1312 msgid "" "Indicates that the variable-sized portion of an instance of this type is at " "the end of the instance's memory area, at an offset of ``Py_TYPE(obj)-" ">tp_basicsize`` (which may be different in each subclass)." msgstr "" #: ../../c-api/typeobj.rst:1317 msgid "" "When setting this flag, be sure that all superclasses either use this memory " "layout, or are not variable-sized. Python does not check this." msgstr "" #: ../../c-api/typeobj.rst:1325 msgid "This flag is inherited." msgstr "" #: ../../c-api/typeobj.rst:1339 msgid "" "Functions such as :c:func:`PyLong_Check` will call :c:func:" "`PyType_FastSubclass` with one of these flags to quickly determine if a type " "is a subclass of a built-in type; such specific checks are faster than a " "generic check, like :c:func:`PyObject_IsInstance`. Custom types that inherit " "from built-ins should have their :c:member:`~PyTypeObject.tp_flags` set " "appropriately, or the code that interacts with such types will behave " "differently depending on what kind of check is used." msgstr "" #: ../../c-api/typeobj.rst:1350 msgid "" "This bit is set when the :c:member:`~PyTypeObject.tp_finalize` slot is " "present in the type structure." msgstr "" #: ../../c-api/typeobj.rst:1355 msgid "" "This flag isn't necessary anymore, as the interpreter assumes the :c:member:" "`~PyTypeObject.tp_finalize` slot is always present in the type structure." msgstr "" #: ../../c-api/typeobj.rst:1366 msgid "" "This bit is set when the class implements the :ref:`vectorcall protocol " "`. See :c:member:`~PyTypeObject.tp_vectorcall_offset` for " "details." msgstr "" #: ../../c-api/typeobj.rst:1372 msgid "" "This bit is inherited if :c:member:`~PyTypeObject.tp_call` is also inherited." msgstr "" #: ../../c-api/typeobj.rst:1375 msgid "as ``_Py_TPFLAGS_HAVE_VECTORCALL``" msgstr "" #: ../../c-api/typeobj.rst:1379 msgid "" "Renamed to the current name, without the leading underscore. The old " "provisional name is :term:`soft deprecated`." msgstr "" #: ../../c-api/typeobj.rst:1384 msgid "" "This flag is now removed from a class when the class's :py:meth:`~object." "__call__` method is reassigned." msgstr "" #: ../../c-api/typeobj.rst:1387 msgid "This flag can now be inherited by mutable classes." msgstr "" #: ../../c-api/typeobj.rst:1391 msgid "" "This bit is set for type objects that are immutable: type attributes cannot " "be set nor deleted." msgstr "" #: ../../c-api/typeobj.rst:1393 msgid "" ":c:func:`PyType_Ready` automatically applies this flag to :ref:`static types " "`." msgstr "" #: ../../c-api/typeobj.rst:1398 ../../c-api/typeobj.rst:1507 #: ../../c-api/typeobj.rst:1519 msgid "This flag is not inherited." msgstr "" #: ../../c-api/typeobj.rst:1404 msgid "" "Disallow creating instances of the type: set :c:member:`~PyTypeObject." "tp_new` to NULL and don't create the ``__new__`` key in the type dictionary." msgstr "" #: ../../c-api/typeobj.rst:1408 msgid "" "The flag must be set before creating the type, not after. For example, it " "must be set before :c:func:`PyType_Ready` is called on the type." msgstr "" #: ../../c-api/typeobj.rst:1411 msgid "" "The flag is set automatically on :ref:`static types ` if :c:" "member:`~PyTypeObject.tp_base` is NULL or ``&PyBaseObject_Type`` and :c:" "member:`~PyTypeObject.tp_new` is NULL." msgstr "" #: ../../c-api/typeobj.rst:1417 msgid "" "This flag is not inherited. However, subclasses will not be instantiable " "unless they provide a non-NULL :c:member:`~PyTypeObject.tp_new` (which is " "only possible via the C API)." msgstr "" #: ../../c-api/typeobj.rst:1424 msgid "" "To disallow instantiating a class directly but allow instantiating its " "subclasses (e.g. for an :term:`abstract base class`), do not use this flag. " "Instead, make :c:member:`~PyTypeObject.tp_new` only succeed for subclasses." msgstr "" #: ../../c-api/typeobj.rst:1435 msgid "" "This bit indicates that instances of the class may match mapping patterns " "when used as the subject of a :keyword:`match` block. It is automatically " "set when registering or subclassing :class:`collections.abc.Mapping`, and " "unset when registering :class:`collections.abc.Sequence`." msgstr "" #: ../../c-api/typeobj.rst:1442 ../../c-api/typeobj.rst:1464 msgid "" ":c:macro:`Py_TPFLAGS_MAPPING` and :c:macro:`Py_TPFLAGS_SEQUENCE` are " "mutually exclusive; it is an error to enable both flags simultaneously." msgstr "" #: ../../c-api/typeobj.rst:1447 msgid "" "This flag is inherited by types that do not already set :c:macro:" "`Py_TPFLAGS_SEQUENCE`." msgstr "" #: ../../c-api/typeobj.rst:1450 ../../c-api/typeobj.rst:1472 msgid ":pep:`634` -- Structural Pattern Matching: Specification" msgstr "" #: ../../c-api/typeobj.rst:1457 msgid "" "This bit indicates that instances of the class may match sequence patterns " "when used as the subject of a :keyword:`match` block. It is automatically " "set when registering or subclassing :class:`collections.abc.Sequence`, and " "unset when registering :class:`collections.abc.Mapping`." msgstr "" #: ../../c-api/typeobj.rst:1469 msgid "" "This flag is inherited by types that do not already set :c:macro:" "`Py_TPFLAGS_MAPPING`." msgstr "" #: ../../c-api/typeobj.rst:1479 msgid "" "Internal. Do not set or unset this flag. To indicate that a class has " "changed call :c:func:`PyType_Modified`" msgstr "" #: ../../c-api/typeobj.rst:1483 msgid "" "This flag is present in header files, but is not be used. It will be removed " "in a future version of CPython" msgstr "" #: ../../c-api/typeobj.rst:1489 msgid "" "This macro does nothing. Historically, this would indicate that the :c:" "member:`~PyTypeObject.tp_version_tag` field was available and initialized." msgstr "" #: ../../c-api/typeobj.rst:1499 msgid "" "This bit indicates that instances of this type will have an \"inline " "values\" array (containing the object's attributes) placed directly after " "the end of the object." msgstr "" #: ../../c-api/typeobj.rst:1503 msgid "This requires that :c:macro:`Py_TPFLAGS_HAVE_GC` is set." msgstr "" #: ../../c-api/typeobj.rst:1514 msgid "" "This bit indicates that this is an abstract type and therefore cannot be " "instantiated." msgstr "" #: ../../c-api/typeobj.rst:1522 msgid ":mod:`abc`" msgstr "" #: ../../c-api/typeobj.rst:1527 msgid "" "Internal. Do not set or unset this flag. Historically, this was a reserved " "flag for use in Stackless Python." msgstr "" #: ../../c-api/typeobj.rst:1531 msgid "" "This flag is present in header files, but is not be used. This may be " "removed in a future version of CPython." msgstr "" #: ../../c-api/typeobj.rst:1539 msgid "" "An optional pointer to a NUL-terminated C string giving the docstring for " "this type object. This is exposed as the :attr:`~type.__doc__` attribute on " "the type and instances of the type." msgstr "" #: ../../c-api/typeobj.rst:1545 msgid "This field is *not* inherited by subtypes." msgstr "" #: ../../c-api/typeobj.rst:1552 msgid "" "An optional pointer to a traversal function for the garbage collector. This " "is only used if the :c:macro:`Py_TPFLAGS_HAVE_GC` flag bit is set. The " "signature is::" msgstr "" #: ../../c-api/typeobj.rst:1555 msgid "int tp_traverse(PyObject *self, visitproc visit, void *arg);" msgstr "" #: ../../c-api/typeobj.rst:1557 ../../c-api/typeobj.rst:1784 msgid "" "More information about Python's garbage collection scheme can be found in " "section :ref:`supporting-cycle-detection`." msgstr "" #: ../../c-api/typeobj.rst:1560 msgid "" "The :c:member:`~PyTypeObject.tp_traverse` pointer is used by the garbage " "collector to detect reference cycles. A typical implementation of a :c:" "member:`~PyTypeObject.tp_traverse` function simply calls :c:func:`Py_VISIT` " "on each of the instance's members that are Python objects that the instance " "owns. For example, this is function :c:func:`!local_traverse` from the :mod:" "`!_thread` extension module::" msgstr "" #: ../../c-api/typeobj.rst:1566 msgid "" "static int\n" "local_traverse(PyObject *op, visitproc visit, void *arg)\n" "{\n" " localobject *self = (localobject *) op;\n" " Py_VISIT(self->args);\n" " Py_VISIT(self->kw);\n" " Py_VISIT(self->dict);\n" " return 0;\n" "}" msgstr "" #: ../../c-api/typeobj.rst:1576 msgid "" "Note that :c:func:`Py_VISIT` is called only on those members that can " "participate in reference cycles. Although there is also a ``self->key`` " "member, it can only be ``NULL`` or a Python string and therefore cannot be " "part of a reference cycle." msgstr "" #: ../../c-api/typeobj.rst:1580 msgid "" "On the other hand, even if you know a member can never be part of a cycle, " "as a debugging aid you may want to visit it anyway just so the :mod:`gc` " "module's :func:`~gc.get_referents` function will include it." msgstr "" #: ../../c-api/typeobj.rst:1584 msgid "" "Heap types (:c:macro:`Py_TPFLAGS_HEAPTYPE`) must visit their type with::" msgstr "" #: ../../c-api/typeobj.rst:1586 msgid "Py_VISIT(Py_TYPE(self));" msgstr "" #: ../../c-api/typeobj.rst:1588 msgid "" "It is only needed since Python 3.9. To support Python 3.8 and older, this " "line must be conditional::" msgstr "" #: ../../c-api/typeobj.rst:1591 msgid "" "#if PY_VERSION_HEX >= 0x03090000\n" " Py_VISIT(Py_TYPE(self));\n" "#endif" msgstr "" #: ../../c-api/typeobj.rst:1595 msgid "" "If the :c:macro:`Py_TPFLAGS_MANAGED_DICT` bit is set in the :c:member:" "`~PyTypeObject.tp_flags` field, the traverse function must call :c:func:" "`PyObject_VisitManagedDict` like this::" msgstr "" #: ../../c-api/typeobj.rst:1599 msgid "PyObject_VisitManagedDict((PyObject*)self, visit, arg);" msgstr "" #: ../../c-api/typeobj.rst:1602 msgid "" "When implementing :c:member:`~PyTypeObject.tp_traverse`, only the members " "that the instance *owns* (by having :term:`strong references ` to them) must be visited. For instance, if an object supports " "weak references via the :c:member:`~PyTypeObject.tp_weaklist` slot, the " "pointer supporting the linked list (what *tp_weaklist* points to) must " "**not** be visited as the instance does not directly own the weak references " "to itself (the weakreference list is there to support the weak reference " "machinery, but the instance has no strong reference to the elements inside " "it, as they are allowed to be removed even if the instance is still alive)." msgstr "" #: ../../c-api/typeobj.rst:1614 msgid "" "The traversal function must not have any side effects. It must not modify " "the reference counts of any Python objects nor create or destroy any Python " "objects." msgstr "" #: ../../c-api/typeobj.rst:1618 msgid "" "Note that :c:func:`Py_VISIT` requires the *visit* and *arg* parameters to :c:" "func:`!local_traverse` to have these specific names; don't name them just " "anything." msgstr "" #: ../../c-api/typeobj.rst:1622 msgid "" "Instances of :ref:`heap-allocated types ` hold a reference to " "their type. Their traversal function must therefore either visit :c:func:" "`Py_TYPE(self) `, or delegate this responsibility by calling " "``tp_traverse`` of another heap-allocated type (such as a heap-allocated " "superclass). If they do not, the type object may not be garbage-collected." msgstr "" #: ../../c-api/typeobj.rst:1631 msgid "" "The :c:member:`~PyTypeObject.tp_traverse` function can be called from any " "thread." msgstr "" #: ../../c-api/typeobj.rst:1636 msgid "" "Heap-allocated types are expected to visit ``Py_TYPE(self)`` in " "``tp_traverse``. In earlier versions of Python, due to `bug 40217 `_, doing this may lead to crashes in subclasses." msgstr "" #: ../../c-api/typeobj.rst:1645 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_clear` and the :c:macro:`Py_TPFLAGS_HAVE_GC` flag bit: the flag bit, :c:" "member:`~PyTypeObject.tp_traverse`, and :c:member:`~PyTypeObject.tp_clear` " "are all inherited from the base type if they are all zero in the subtype." msgstr "" #: ../../c-api/typeobj.rst:1655 msgid "An optional pointer to a clear function. The signature is::" msgstr "" #: ../../c-api/typeobj.rst:1657 msgid "int tp_clear(PyObject *);" msgstr "" #: ../../c-api/typeobj.rst:1659 msgid "" "The purpose of this function is to break reference cycles that are causing " "a :term:`cyclic isolate` so that the objects can be safely destroyed. A " "cleared object is a partially destroyed object; the object is not obligated " "to satisfy design invariants held during normal use." msgstr "" #: ../../c-api/typeobj.rst:1664 msgid "" ":c:member:`!tp_clear` does not need to delete references to objects that " "can't participate in reference cycles, such as Python strings or Python " "integers. However, it may be convenient to clear all references, and write " "the type's :c:member:`~PyTypeObject.tp_dealloc` function to invoke :c:member:" "`!tp_clear` to avoid code duplication. (Beware that :c:member:`!tp_clear` " "might have already been called. Prefer calling idempotent functions like :c:" "func:`Py_CLEAR`.)" msgstr "" #: ../../c-api/typeobj.rst:1672 msgid "" "Any non-trivial cleanup should be performed in :c:member:`~PyTypeObject." "tp_finalize` instead of :c:member:`!tp_clear`." msgstr "" #: ../../c-api/typeobj.rst:1677 msgid "" "If :c:member:`!tp_clear` fails to break a reference cycle then the objects " "in the :term:`cyclic isolate` may remain indefinitely uncollectable " "(\"leak\"). See :data:`gc.garbage`." msgstr "" #: ../../c-api/typeobj.rst:1683 msgid "" "Referents (direct and indirect) might have already been cleared; they are " "not guaranteed to be in a consistent state." msgstr "" #: ../../c-api/typeobj.rst:1688 msgid "" "The :c:member:`~PyTypeObject.tp_clear` function can be called from any " "thread." msgstr "" #: ../../c-api/typeobj.rst:1693 msgid "" "An object is not guaranteed to be automatically cleared before its " "destructor (:c:member:`~PyTypeObject.tp_dealloc`) is called." msgstr "" #: ../../c-api/typeobj.rst:1696 msgid "" "This function differs from the destructor (:c:member:`~PyTypeObject." "tp_dealloc`) in the following ways:" msgstr "" #: ../../c-api/typeobj.rst:1699 msgid "" "The purpose of clearing an object is to remove references to other objects " "that might participate in a reference cycle. The purpose of the destructor, " "on the other hand, is a superset: it must release *all* resources it owns, " "including references to objects that cannot participate in a reference cycle " "(e.g., integers) as well as the object's own memory (by calling :c:member:" "`~PyTypeObject.tp_free`)." msgstr "" #: ../../c-api/typeobj.rst:1705 msgid "" "When :c:member:`!tp_clear` is called, other objects might still hold " "references to the object being cleared. Because of this, :c:member:`!" "tp_clear` must not deallocate the object's own memory (:c:member:" "`~PyTypeObject.tp_free`). The destructor, on the other hand, is only called " "when no (strong) references exist, and as such, must safely destroy the " "object itself by deallocating it." msgstr "" #: ../../c-api/typeobj.rst:1711 msgid "" ":c:member:`!tp_clear` might never be automatically called. An object's " "destructor, on the other hand, will be automatically called some time after " "the object becomes unreachable (i.e., either there are no references to the " "object or the object is a member of a :term:`cyclic isolate`)." msgstr "" #: ../../c-api/typeobj.rst:1716 msgid "" "No guarantees are made about when, if, or how often Python automatically " "clears an object, except:" msgstr "" #: ../../c-api/typeobj.rst:1719 msgid "" "Python will not automatically clear an object if it is reachable, i.e., " "there is a reference to it and it is not a member of a :term:`cyclic " "isolate`." msgstr "" #: ../../c-api/typeobj.rst:1722 msgid "" "Python will not automatically clear an object if it has not been " "automatically finalized (see :c:member:`~PyTypeObject.tp_finalize`). (If " "the finalizer resurrected the object, the object may or may not be " "automatically finalized again before it is cleared.)" msgstr "" #: ../../c-api/typeobj.rst:1726 msgid "" "If an object is a member of a :term:`cyclic isolate`, Python will not " "automatically clear it if any member of the cyclic isolate has not yet been " "automatically finalized (:c:member:`~PyTypeObject.tp_finalize`)." msgstr "" #: ../../c-api/typeobj.rst:1729 msgid "" "Python will not destroy an object until after any automatic calls to its :c:" "member:`!tp_clear` function have returned. This ensures that the act of " "breaking a reference cycle does not invalidate the ``self`` pointer while :c:" "member:`!tp_clear` is still executing." msgstr "" #: ../../c-api/typeobj.rst:1733 msgid "" "Python will not automatically call :c:member:`!tp_clear` multiple times " "concurrently." msgstr "" #: ../../c-api/typeobj.rst:1736 msgid "" "CPython currently only automatically clears objects as needed to break " "reference cycles in a :term:`cyclic isolate`, but future versions might " "clear objects regularly before their destruction." msgstr "" #: ../../c-api/typeobj.rst:1740 msgid "" "Taken together, all :c:member:`~PyTypeObject.tp_clear` functions in the " "system must combine to break all reference cycles. This is subtle, and if " "in any doubt supply a :c:member:`~PyTypeObject.tp_clear` function. For " "example, the tuple type does not implement a :c:member:`~PyTypeObject." "tp_clear` function, because it's possible to prove that no reference cycle " "can be composed entirely of tuples. Therefore the :c:member:`~PyTypeObject." "tp_clear` functions of other types are responsible for breaking any cycle " "containing a tuple. This isn't immediately obvious, and there's rarely a " "good reason to avoid implementing :c:member:`~PyTypeObject.tp_clear`." msgstr "" #: ../../c-api/typeobj.rst:1751 msgid "" "Implementations of :c:member:`~PyTypeObject.tp_clear` should drop the " "instance's references to those of its members that may be Python objects, " "and set its pointers to those members to ``NULL``, as in the following " "example::" msgstr "" #: ../../c-api/typeobj.rst:1755 msgid "" "static int\n" "local_clear(PyObject *op)\n" "{\n" " localobject *self = (localobject *) op;\n" " Py_CLEAR(self->key);\n" " Py_CLEAR(self->args);\n" " Py_CLEAR(self->kw);\n" " Py_CLEAR(self->dict);\n" " return 0;\n" "}" msgstr "" #: ../../c-api/typeobj.rst:1766 msgid "" "The :c:func:`Py_CLEAR` macro should be used, because clearing references is " "delicate: the reference to the contained object must not be released (via :" "c:func:`Py_DECREF`) until after the pointer to the contained object is set " "to ``NULL``. This is because releasing the reference may cause the " "contained object to become trash, triggering a chain of reclamation activity " "that may include invoking arbitrary Python code (due to finalizers, or " "weakref callbacks, associated with the contained object). If it's possible " "for such code to reference *self* again, it's important that the pointer to " "the contained object be ``NULL`` at that time, so that *self* knows the " "contained object can no longer be used. The :c:func:`Py_CLEAR` macro " "performs the operations in a safe order." msgstr "" #: ../../c-api/typeobj.rst:1778 msgid "" "If the :c:macro:`Py_TPFLAGS_MANAGED_DICT` bit is set in the :c:member:" "`~PyTypeObject.tp_flags` field, the clear function must call :c:func:" "`PyObject_ClearManagedDict` like this::" msgstr "" #: ../../c-api/typeobj.rst:1782 msgid "PyObject_ClearManagedDict((PyObject*)self);" msgstr "" #: ../../c-api/typeobj.rst:1791 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_traverse` and the :c:macro:`Py_TPFLAGS_HAVE_GC` flag bit: the flag bit, :" "c:member:`~PyTypeObject.tp_traverse`, and :c:member:`~PyTypeObject.tp_clear` " "are all inherited from the base type if they are all zero in the subtype." msgstr "" #: ../../c-api/typeobj.rst:1805 msgid "" "An optional pointer to the rich comparison function, whose signature is::" msgstr "" #: ../../c-api/typeobj.rst:1807 msgid "PyObject *tp_richcompare(PyObject *self, PyObject *other, int op);" msgstr "" #: ../../c-api/typeobj.rst:1809 msgid "" "The first parameter is guaranteed to be an instance of the type that is " "defined by :c:type:`PyTypeObject`." msgstr "" #: ../../c-api/typeobj.rst:1812 msgid "" "The function should return the result of the comparison (usually ``Py_True`` " "or ``Py_False``). If the comparison is undefined, it must return " "``Py_NotImplemented``, if another error occurred it must return ``NULL`` and " "set an exception condition." msgstr "" #: ../../c-api/typeobj.rst:1817 msgid "" "The following constants are defined to be used as the third argument for :c:" "member:`~PyTypeObject.tp_richcompare` and for :c:func:`PyObject_RichCompare`:" msgstr "" #: ../../c-api/typeobj.rst:1823 msgid "Constant" msgstr "" #: ../../c-api/typeobj.rst:1823 msgid "Comparison" msgstr "" #: ../../c-api/typeobj.rst:1825 msgid "``<``" msgstr "``<``" #: ../../c-api/typeobj.rst:1827 msgid "``<=``" msgstr "``<=``" #: ../../c-api/typeobj.rst:1829 msgid "``==``" msgstr "``==``" #: ../../c-api/typeobj.rst:1831 msgid "``!=``" msgstr "``!=``" #: ../../c-api/typeobj.rst:1833 msgid "``>``" msgstr "``>``" #: ../../c-api/typeobj.rst:1835 msgid "``>=``" msgstr "``>=``" #: ../../c-api/typeobj.rst:1838 msgid "" "The following macro is defined to ease writing rich comparison functions:" msgstr "" #: ../../c-api/typeobj.rst:1842 msgid "" "Return ``Py_True`` or ``Py_False`` from the function, depending on the " "result of a comparison. VAL_A and VAL_B must be orderable by C comparison " "operators (for example, they may be C ints or floats). The third argument " "specifies the requested operation, as for :c:func:`PyObject_RichCompare`." msgstr "" #: ../../c-api/typeobj.rst:1848 msgid "The returned value is a new :term:`strong reference`." msgstr "" #: ../../c-api/typeobj.rst:1850 msgid "On error, sets an exception and returns ``NULL`` from the function." msgstr "" #: ../../c-api/typeobj.rst:1858 msgid "" "This field is inherited by subtypes together with :c:member:`~PyTypeObject." "tp_hash`: a subtype inherits :c:member:`~PyTypeObject.tp_richcompare` and :c:" "member:`~PyTypeObject.tp_hash` when the subtype's :c:member:`~PyTypeObject." "tp_richcompare` and :c:member:`~PyTypeObject.tp_hash` are both ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:1865 msgid "" ":c:data:`PyBaseObject_Type` provides a :c:member:`~PyTypeObject." "tp_richcompare` implementation, which may be inherited. However, if only :c:" "member:`~PyTypeObject.tp_hash` is defined, not even the inherited function " "is used and instances of the type will not be able to participate in any " "comparisons." msgstr "" #: ../../c-api/typeobj.rst:1874 msgid "" "While this field is still supported, :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` " "should be used instead, if at all possible." msgstr "" #: ../../c-api/typeobj.rst:1877 msgid "" "If the instances of this type are weakly referenceable, this field is " "greater than zero and contains the offset in the instance structure of the " "weak reference list head (ignoring the GC header, if present); this offset " "is used by :c:func:`PyObject_ClearWeakRefs` and the ``PyWeakref_*`` " "functions. The instance structure needs to include a field of type :c:expr:" "`PyObject*` which is initialized to ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:1884 msgid "" "Do not confuse this field with :c:member:`~PyTypeObject.tp_weaklist`; that " "is the list head for weak references to the type object itself." msgstr "" #: ../../c-api/typeobj.rst:1887 msgid "" "It is an error to set both the :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` bit " "and :c:member:`~PyTypeObject.tp_weaklistoffset`." msgstr "" #: ../../c-api/typeobj.rst:1892 msgid "" "This field is inherited by subtypes, but see the rules listed below. A " "subtype may override this offset; this means that the subtype uses a " "different weak reference list head than the base type. Since the list head " "is always found via :c:member:`~PyTypeObject.tp_weaklistoffset`, this should " "not be a problem." msgstr "" #: ../../c-api/typeobj.rst:1899 msgid "" "If the :c:macro:`Py_TPFLAGS_MANAGED_WEAKREF` bit is set in the :c:member:" "`~PyTypeObject.tp_flags` field, then :c:member:`~PyTypeObject." "tp_weaklistoffset` will be set to a negative value, to indicate that it is " "unsafe to use this field." msgstr "" #: ../../c-api/typeobj.rst:1909 msgid "" "An optional pointer to a function that returns an :term:`iterator` for the " "object. Its presence normally signals that the instances of this type are :" "term:`iterable` (although sequences may be iterable without this function)." msgstr "" #: ../../c-api/typeobj.rst:1913 msgid "This function has the same signature as :c:func:`PyObject_GetIter`::" msgstr "" #: ../../c-api/typeobj.rst:1915 msgid "PyObject *tp_iter(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:1926 msgid "" "An optional pointer to a function that returns the next item in an :term:" "`iterator`. The signature is::" msgstr "" #: ../../c-api/typeobj.rst:1929 msgid "PyObject *tp_iternext(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:1931 msgid "" "When the iterator is :term:`exhausted`, the ``tp_iternext`` function must " "return ``NULL``; a :exc:`StopIteration` exception may or may not be set. " "When another error occurs, it must return ``NULL`` too. The presence of " "``tp_iternext`` signals that the instances of this type are iterators." msgstr "" #: ../../c-api/typeobj.rst:1937 msgid "" "Iterator types should also define the :c:member:`~PyTypeObject.tp_iter` " "function, and that function should return the iterator instance itself (not " "a new iterator instance)." msgstr "" #: ../../c-api/typeobj.rst:1941 msgid "This function has the same signature as :c:func:`PyIter_Next`." msgstr "" #: ../../c-api/typeobj.rst:1952 msgid "" "An optional pointer to a static ``NULL``-terminated array of :c:type:" "`PyMethodDef` structures, declaring regular methods of this type." msgstr "" #: ../../c-api/typeobj.rst:1955 msgid "" "For each entry in the array, an entry is added to the type's dictionary " "(see :c:member:`~PyTypeObject.tp_dict` below) containing a method descriptor." msgstr "" #: ../../c-api/typeobj.rst:1960 msgid "" "This field is not inherited by subtypes (methods are inherited through a " "different mechanism)." msgstr "" #: ../../c-api/typeobj.rst:1968 msgid "" "An optional pointer to a static ``NULL``-terminated array of :c:type:" "`PyMemberDef` structures, declaring regular data members (fields or slots) " "of instances of this type." msgstr "" #: ../../c-api/typeobj.rst:1972 msgid "" "For each entry in the array, an entry is added to the type's dictionary " "(see :c:member:`~PyTypeObject.tp_dict` below) containing a member descriptor." msgstr "" #: ../../c-api/typeobj.rst:1977 msgid "" "This field is not inherited by subtypes (members are inherited through a " "different mechanism)." msgstr "" #: ../../c-api/typeobj.rst:1985 msgid "" "An optional pointer to a static ``NULL``-terminated array of :c:type:" "`PyGetSetDef` structures, declaring computed attributes of instances of this " "type." msgstr "" #: ../../c-api/typeobj.rst:1988 msgid "" "For each entry in the array, an entry is added to the type's dictionary " "(see :c:member:`~PyTypeObject.tp_dict` below) containing a getset descriptor." msgstr "" #: ../../c-api/typeobj.rst:1993 msgid "" "This field is not inherited by subtypes (computed attributes are inherited " "through a different mechanism)." msgstr "" #: ../../c-api/typeobj.rst:2001 msgid "" "An optional pointer to a base type from which type properties are " "inherited. At this level, only single inheritance is supported; multiple " "inheritance require dynamically creating a type object by calling the " "metatype." msgstr "" #: ../../c-api/typeobj.rst:2009 msgid "" "Slot initialization is subject to the rules of initializing globals. C99 " "requires the initializers to be \"address constants\". Function designators " "like :c:func:`PyType_GenericNew`, with implicit conversion to a pointer, are " "valid C99 address constants." msgstr "" #: ../../c-api/typeobj.rst:2014 msgid "" "However, the unary '&' operator applied to a non-static variable like :c:" "data:`PyBaseObject_Type` is not required to produce an address constant. " "Compilers may support this (gcc does), MSVC does not. Both compilers are " "strictly standard conforming in this particular behavior." msgstr "" #: ../../c-api/typeobj.rst:2020 msgid "" "Consequently, :c:member:`~PyTypeObject.tp_base` should be set in the " "extension module's init function." msgstr "" #: ../../c-api/typeobj.rst:2025 msgid "This field is not inherited by subtypes (obviously)." msgstr "" #: ../../c-api/typeobj.rst:2029 msgid "" "This field defaults to ``&PyBaseObject_Type`` (which to Python programmers " "is known as the type :class:`object`)." msgstr "" #: ../../c-api/typeobj.rst:2035 msgid "The type's dictionary is stored here by :c:func:`PyType_Ready`." msgstr "" #: ../../c-api/typeobj.rst:2037 msgid "" "This field should normally be initialized to ``NULL`` before PyType_Ready is " "called; it may also be initialized to a dictionary containing initial " "attributes for the type. Once :c:func:`PyType_Ready` has initialized the " "type, extra attributes for the type may be added to this dictionary only if " "they don't correspond to overloaded operations (like :meth:`~object." "__add__`). Once initialization for the type has finished, this field should " "be treated as read-only." msgstr "" #: ../../c-api/typeobj.rst:2045 msgid "" "Some types may not store their dictionary in this slot. Use :c:func:" "`PyType_GetDict` to retrieve the dictionary for an arbitrary type." msgstr "" #: ../../c-api/typeobj.rst:2051 msgid "" "Internals detail: For static builtin types, this is always ``NULL``. " "Instead, the dict for such types is stored on ``PyInterpreterState``. Use :c:" "func:`PyType_GetDict` to get the dict for an arbitrary type." msgstr "" #: ../../c-api/typeobj.rst:2057 msgid "" "This field is not inherited by subtypes (though the attributes defined in " "here are inherited through a different mechanism)." msgstr "" #: ../../c-api/typeobj.rst:2062 msgid "" "If this field is ``NULL``, :c:func:`PyType_Ready` will assign a new " "dictionary to it." msgstr "" #: ../../c-api/typeobj.rst:2067 msgid "" "It is not safe to use :c:func:`PyDict_SetItem` on or otherwise modify :c:" "member:`~PyTypeObject.tp_dict` with the dictionary C-API." msgstr "" #: ../../c-api/typeobj.rst:2075 msgid "An optional pointer to a \"descriptor get\" function." msgstr "" #: ../../c-api/typeobj.rst:2077 ../../c-api/typeobj.rst:2095 #: ../../c-api/typeobj.rst:2161 ../../c-api/typeobj.rst:2193 #: ../../c-api/typeobj.rst:2218 msgid "The function signature is::" msgstr "" #: ../../c-api/typeobj.rst:2079 msgid "PyObject * tp_descr_get(PyObject *self, PyObject *obj, PyObject *type);" msgstr "" #: ../../c-api/typeobj.rst:2092 msgid "" "An optional pointer to a function for setting and deleting a descriptor's " "value." msgstr "" #: ../../c-api/typeobj.rst:2097 msgid "int tp_descr_set(PyObject *self, PyObject *obj, PyObject *value);" msgstr "" #: ../../c-api/typeobj.rst:2099 msgid "The *value* argument is set to ``NULL`` to delete the value." msgstr "" #: ../../c-api/typeobj.rst:2110 msgid "" "While this field is still supported, :c:macro:`Py_TPFLAGS_MANAGED_DICT` " "should be used instead, if at all possible." msgstr "" #: ../../c-api/typeobj.rst:2113 msgid "" "If the instances of this type have a dictionary containing instance " "variables, this field is non-zero and contains the offset in the instances " "of the type of the instance variable dictionary; this offset is used by :c:" "func:`PyObject_GenericGetAttr`." msgstr "" #: ../../c-api/typeobj.rst:2118 msgid "" "Do not confuse this field with :c:member:`~PyTypeObject.tp_dict`; that is " "the dictionary for attributes of the type object itself." msgstr "" #: ../../c-api/typeobj.rst:2121 msgid "" "The value specifies the offset of the dictionary from the start of the " "instance structure." msgstr "" #: ../../c-api/typeobj.rst:2123 msgid "" "The :c:member:`~PyTypeObject.tp_dictoffset` should be regarded as write-" "only. To get the pointer to the dictionary call :c:func:" "`PyObject_GenericGetDict`. Calling :c:func:`PyObject_GenericGetDict` may " "need to allocate memory for the dictionary, so it is may be more efficient " "to call :c:func:`PyObject_GetAttr` when accessing an attribute on the object." msgstr "" #: ../../c-api/typeobj.rst:2129 msgid "" "It is an error to set both the :c:macro:`Py_TPFLAGS_MANAGED_DICT` bit and :c:" "member:`~PyTypeObject.tp_dictoffset`." msgstr "" #: ../../c-api/typeobj.rst:2134 msgid "" "This field is inherited by subtypes. A subtype should not override this " "offset; doing so could be unsafe, if C code tries to access the dictionary " "at the previous offset. To properly support inheritance, use :c:macro:" "`Py_TPFLAGS_MANAGED_DICT`." msgstr "" #: ../../c-api/typeobj.rst:2141 msgid "" "This slot has no default. For :ref:`static types `, if the " "field is ``NULL`` then no :attr:`~object.__dict__` gets created for " "instances." msgstr "" #: ../../c-api/typeobj.rst:2144 msgid "" "If the :c:macro:`Py_TPFLAGS_MANAGED_DICT` bit is set in the :c:member:" "`~PyTypeObject.tp_flags` field, then :c:member:`~PyTypeObject.tp_dictoffset` " "will be set to ``-1``, to indicate that it is unsafe to use this field." msgstr "" #: ../../c-api/typeobj.rst:2154 msgid "An optional pointer to an instance initialization function." msgstr "" #: ../../c-api/typeobj.rst:2156 msgid "" "This function corresponds to the :meth:`~object.__init__` method of " "classes. Like :meth:`!__init__`, it is possible to create an instance " "without calling :meth:`!__init__`, and it is possible to reinitialize an " "instance by calling its :meth:`!__init__` method again." msgstr "" #: ../../c-api/typeobj.rst:2163 msgid "int tp_init(PyObject *self, PyObject *args, PyObject *kwds);" msgstr "" #: ../../c-api/typeobj.rst:2165 msgid "" "The self argument is the instance to be initialized; the *args* and *kwds* " "arguments represent positional and keyword arguments of the call to :meth:" "`~object.__init__`." msgstr "" #: ../../c-api/typeobj.rst:2169 msgid "" "The :c:member:`~PyTypeObject.tp_init` function, if not ``NULL``, is called " "when an instance is created normally by calling its type, after the type's :" "c:member:`~PyTypeObject.tp_new` function has returned an instance of the " "type. If the :c:member:`~PyTypeObject.tp_new` function returns an instance " "of some other type that is not a subtype of the original type, no :c:member:" "`~PyTypeObject.tp_init` function is called; if :c:member:`~PyTypeObject." "tp_new` returns an instance of a subtype of the original type, the " "subtype's :c:member:`~PyTypeObject.tp_init` is called." msgstr "" #: ../../c-api/typeobj.rst:2176 msgid "Returns ``0`` on success, ``-1`` and sets an exception on error." msgstr "" #: ../../c-api/typeobj.rst:2184 msgid "" "For :ref:`static types ` this field does not have a default." msgstr "" #: ../../c-api/typeobj.rst:2191 msgid "An optional pointer to an instance allocation function." msgstr "" #: ../../c-api/typeobj.rst:2195 msgid "PyObject *tp_alloc(PyTypeObject *self, Py_ssize_t nitems);" msgstr "" #: ../../c-api/typeobj.rst:2199 msgid "" "Static subtypes inherit this slot, which will be :c:func:" "`PyType_GenericAlloc` if inherited from :class:`object`." msgstr "" #: ../../c-api/typeobj.rst:2202 ../../c-api/typeobj.rst:2273 msgid ":ref:`Heap subtypes ` do not inherit this slot." msgstr "" #: ../../c-api/typeobj.rst:2206 msgid "" "For heap subtypes, this field is always set to :c:func:`PyType_GenericAlloc`." msgstr "" #: ../../c-api/typeobj.rst:2209 ../../c-api/typeobj.rst:2281 msgid "For static subtypes, this slot is inherited (see above)." msgstr "" #: ../../c-api/typeobj.rst:2216 msgid "An optional pointer to an instance creation function." msgstr "" #: ../../c-api/typeobj.rst:2220 msgid "" "PyObject *tp_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds);" msgstr "" #: ../../c-api/typeobj.rst:2222 msgid "" "The *subtype* argument is the type of the object being created; the *args* " "and *kwds* arguments represent positional and keyword arguments of the call " "to the type. Note that *subtype* doesn't have to equal the type whose :c:" "member:`~PyTypeObject.tp_new` function is called; it may be a subtype of " "that type (but not an unrelated type)." msgstr "" #: ../../c-api/typeobj.rst:2228 msgid "" "The :c:member:`~PyTypeObject.tp_new` function should call ``subtype-" ">tp_alloc(subtype, nitems)`` to allocate space for the object, and then do " "only as much further initialization as is absolutely necessary. " "Initialization that can safely be ignored or repeated should be placed in " "the :c:member:`~PyTypeObject.tp_init` handler. A good rule of thumb is that " "for immutable types, all initialization should take place in :c:member:" "`~PyTypeObject.tp_new`, while for mutable types, most initialization should " "be deferred to :c:member:`~PyTypeObject.tp_init`." msgstr "" #: ../../c-api/typeobj.rst:2236 msgid "" "Set the :c:macro:`Py_TPFLAGS_DISALLOW_INSTANTIATION` flag to disallow " "creating instances of the type in Python." msgstr "" #: ../../c-api/typeobj.rst:2241 msgid "" "This field is inherited by subtypes, except it is not inherited by :ref:" "`static types ` whose :c:member:`~PyTypeObject.tp_base` is " "``NULL`` or ``&PyBaseObject_Type``." msgstr "" #: ../../c-api/typeobj.rst:2247 msgid "" "For :ref:`static types ` this field has no default. This means " "if the slot is defined as ``NULL``, the type cannot be called to create new " "instances; presumably there is some other way to create instances, like a " "factory function." msgstr "" #: ../../c-api/typeobj.rst:2257 msgid "" "An optional pointer to an instance deallocation function. Its signature is::" msgstr "" #: ../../c-api/typeobj.rst:2259 msgid "void tp_free(void *self);" msgstr "" #: ../../c-api/typeobj.rst:2261 msgid "" "This function must free the memory allocated by :c:member:`~PyTypeObject." "tp_alloc`." msgstr "" #: ../../c-api/typeobj.rst:2266 msgid "" "Static subtypes inherit this slot, which will be :c:func:`PyObject_Free` if " "inherited from :class:`object`. Exception: If the type supports garbage " "collection (i.e., the :c:macro:`Py_TPFLAGS_HAVE_GC` flag is set in :c:member:" "`~PyTypeObject.tp_flags`) and it would inherit :c:func:`PyObject_Free`, then " "this slot is not inherited but instead defaults to :c:func:`PyObject_GC_Del`." msgstr "" #: ../../c-api/typeobj.rst:2277 msgid "" "For :ref:`heap subtypes `, this slot defaults to a deallocator " "suitable to match :c:func:`PyType_GenericAlloc` and the value of the :c:" "macro:`Py_TPFLAGS_HAVE_GC` flag." msgstr "" #: ../../c-api/typeobj.rst:2288 msgid "An optional pointer to a function called by the garbage collector." msgstr "" #: ../../c-api/typeobj.rst:2290 msgid "" "The garbage collector needs to know whether a particular object is " "collectible or not. Normally, it is sufficient to look at the object's " "type's :c:member:`~PyTypeObject.tp_flags` field, and check the :c:macro:" "`Py_TPFLAGS_HAVE_GC` flag bit. But some types have a mixture of statically " "and dynamically allocated instances, and the statically allocated instances " "are not collectible. Such types should define this function; it should " "return ``1`` for a collectible instance, and ``0`` for a non-collectible " "instance. The signature is::" msgstr "" #: ../../c-api/typeobj.rst:2298 msgid "int tp_is_gc(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:2300 msgid "" "(The only example of this are types themselves. The metatype, :c:data:" "`PyType_Type`, defines this function to distinguish between statically and :" "ref:`dynamically allocated types `.)" msgstr "" #: ../../c-api/typeobj.rst:2310 msgid "" "This slot has no default. If this field is ``NULL``, :c:macro:" "`Py_TPFLAGS_HAVE_GC` is used as the functional equivalent." msgstr "" #: ../../c-api/typeobj.rst:2318 msgid "Tuple of base types." msgstr "" #: ../../c-api/typeobj.rst:2320 ../../c-api/typeobj.rst:2344 msgid "" "This field should be set to ``NULL`` and treated as read-only. Python will " "fill it in when the type is :c:func:`initialized `." msgstr "" #: ../../c-api/typeobj.rst:2323 msgid "" "For dynamically created classes, the :c:data:`Py_tp_bases` :c:type:`slot " "` can be used instead of the *bases* argument of :c:func:" "`PyType_FromSpecWithBases`. The argument form is preferred." msgstr "" #: ../../c-api/typeobj.rst:2330 msgid "" "Multiple inheritance does not work well for statically defined types. If you " "set ``tp_bases`` to a tuple, Python will not raise an error, but some slots " "will only be inherited from the first base." msgstr "" #: ../../c-api/typeobj.rst:2336 ../../c-api/typeobj.rst:2359 #: ../../c-api/typeobj.rst:2376 ../../c-api/typeobj.rst:2393 #: ../../c-api/typeobj.rst:2409 msgid "This field is not inherited." msgstr "" #: ../../c-api/typeobj.rst:2341 msgid "" "Tuple containing the expanded set of base types, starting with the type " "itself and ending with :class:`object`, in Method Resolution Order." msgstr "" #: ../../c-api/typeobj.rst:2349 msgid "" "This field is not inherited; it is calculated fresh by :c:func:" "`PyType_Ready`." msgstr "" #: ../../c-api/typeobj.rst:2355 msgid "Unused. Internal use only." msgstr "" #: ../../c-api/typeobj.rst:2364 msgid "" "A collection of subclasses. Internal use only. May be an invalid pointer." msgstr "" #: ../../c-api/typeobj.rst:2366 msgid "" "To get a list of subclasses, call the Python method :py:meth:`~type." "__subclasses__`." msgstr "" #: ../../c-api/typeobj.rst:2371 msgid "" "For some types, this field does not hold a valid :c:expr:`PyObject*`. The " "type was changed to :c:expr:`void*` to indicate this." msgstr "" #: ../../c-api/typeobj.rst:2381 msgid "" "Weak reference list head, for weak references to this type object. Not " "inherited. Internal use only." msgstr "" #: ../../c-api/typeobj.rst:2386 msgid "" "Internals detail: For the static builtin types this is always ``NULL``, even " "if weakrefs are added. Instead, the weakrefs for each are stored on " "``PyInterpreterState``. Use the public C-API or the internal " "``_PyObject_GET_WEAKREFS_LISTPTR()`` macro to avoid the distinction." msgstr "" #: ../../c-api/typeobj.rst:2400 msgid "" "This field is deprecated. Use :c:member:`~PyTypeObject.tp_finalize` instead." msgstr "" #: ../../c-api/typeobj.rst:2405 msgid "Used to index into the method cache. Internal use only." msgstr "" #: ../../c-api/typeobj.rst:2416 msgid "" "An optional pointer to an instance finalization function. This is the C " "implementation of the :meth:`~object.__del__` special method. Its signature " "is::" msgstr "" #: ../../c-api/typeobj.rst:2420 msgid "void tp_finalize(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:2422 msgid "" "The primary purpose of finalization is to perform any non-trivial cleanup " "that must be performed before the object is destroyed, while the object and " "any other objects it directly or indirectly references are still in a " "consistent state. The finalizer is allowed to execute arbitrary Python code." msgstr "" #: ../../c-api/typeobj.rst:2428 msgid "" "Before Python automatically finalizes an object, some of the object's direct " "or indirect referents might have themselves been automatically finalized. " "However, none of the referents will have been automatically cleared (:c:" "member:`~PyTypeObject.tp_clear`) yet." msgstr "" #: ../../c-api/typeobj.rst:2433 msgid "" "Other non-finalized objects might still be using a finalized object, so the " "finalizer must leave the object in a sane state (e.g., invariants are still " "met)." msgstr "" #: ../../c-api/typeobj.rst:2439 msgid "" "After Python automatically finalizes an object, Python might start " "automatically clearing (:c:member:`~PyTypeObject.tp_clear`) the object and " "its referents (direct and indirect). Cleared objects are not guaranteed to " "be in a consistent state; a finalized object must be able to tolerate " "cleared referents." msgstr "" #: ../../c-api/typeobj.rst:2447 msgid "" "An object is not guaranteed to be automatically finalized before its " "destructor (:c:member:`~PyTypeObject.tp_dealloc`) is called. It is " "recommended to call :c:func:`PyObject_CallFinalizerFromDealloc` at the " "beginning of :c:member:`!tp_dealloc` to guarantee that the object is always " "finalized before destruction." msgstr "" #: ../../c-api/typeobj.rst:2455 msgid "" "The :c:member:`~PyTypeObject.tp_finalize` function can be called from any " "thread, although the :term:`GIL` will be held." msgstr "" #: ../../c-api/typeobj.rst:2460 msgid "" "The :c:member:`!tp_finalize` function can be called during shutdown, after " "some global variables have been deleted. See the documentation of the :meth:" "`~object.__del__` method for details." msgstr "" #: ../../c-api/typeobj.rst:2464 msgid "" "When Python finalizes an object, it behaves like the following algorithm:" msgstr "" #: ../../c-api/typeobj.rst:2466 msgid "" "Python might mark the object as *finalized*. Currently, Python always marks " "objects whose type supports garbage collection (i.e., the :c:macro:" "`Py_TPFLAGS_HAVE_GC` flag is set in :c:member:`~PyTypeObject.tp_flags`) and " "never marks other types of objects; this might change in a future version." msgstr "" #: ../../c-api/typeobj.rst:2471 msgid "" "If the object is not marked as *finalized* and its :c:member:`!tp_finalize` " "finalizer function is non-``NULL``, the finalizer function is called." msgstr "" #: ../../c-api/typeobj.rst:2474 msgid "" "If the finalizer function was called and the finalizer made the object " "reachable (i.e., there is a reference to the object and it is not a member " "of a :term:`cyclic isolate`), then the finalizer is said to have " "*resurrected* the object. It is unspecified whether the finalizer can also " "resurrect the object by adding a new reference to the object that does not " "make it reachable, i.e., the object is (still) a member of a cyclic isolate." msgstr "" #: ../../c-api/typeobj.rst:2481 msgid "" "If the finalizer resurrected the object, the object's pending destruction is " "canceled and the object's *finalized* mark might be removed if present. " "Currently, Python never removes the *finalized* mark; this might change in a " "future version." msgstr "" #: ../../c-api/typeobj.rst:2486 msgid "" "*Automatic finalization* refers to any finalization performed by Python " "except via calls to :c:func:`PyObject_CallFinalizer` or :c:func:" "`PyObject_CallFinalizerFromDealloc`. No guarantees are made about when, if, " "or how often an object is automatically finalized, except:" msgstr "" #: ../../c-api/typeobj.rst:2491 msgid "" "Python will not automatically finalize an object if it is reachable, i.e., " "there is a reference to it and it is not a member of a :term:`cyclic " "isolate`." msgstr "" #: ../../c-api/typeobj.rst:2494 msgid "" "Python will not automatically finalize an object if finalizing it would not " "mark the object as *finalized*. Currently, this applies to objects whose " "type does not support garbage collection, i.e., the :c:macro:" "`Py_TPFLAGS_HAVE_GC` flag is not set. Such objects can still be manually " "finalized by calling :c:func:`PyObject_CallFinalizer` or :c:func:" "`PyObject_CallFinalizerFromDealloc`." msgstr "" #: ../../c-api/typeobj.rst:2500 msgid "" "Python will not automatically finalize any two members of a :term:`cyclic " "isolate` concurrently." msgstr "" #: ../../c-api/typeobj.rst:2502 msgid "" "Python will not automatically finalize an object after it has automatically " "cleared (:c:member:`~PyTypeObject.tp_clear`) the object." msgstr "" #: ../../c-api/typeobj.rst:2504 msgid "" "If an object is a member of a :term:`cyclic isolate`, Python will not " "automatically finalize it after automatically clearing (see :c:member:" "`~PyTypeObject.tp_clear`) any other member." msgstr "" #: ../../c-api/typeobj.rst:2507 msgid "" "Python will automatically finalize every member of a :term:`cyclic isolate` " "before it automatically clears (see :c:member:`~PyTypeObject.tp_clear`) any " "of them." msgstr "" #: ../../c-api/typeobj.rst:2510 msgid "" "If Python is going to automatically clear an object (:c:member:" "`~PyTypeObject.tp_clear`), it will automatically finalize the object first." msgstr "" #: ../../c-api/typeobj.rst:2514 msgid "" "Python currently only automatically finalizes objects that are members of a :" "term:`cyclic isolate`, but future versions might finalize objects regularly " "before their destruction." msgstr "" #: ../../c-api/typeobj.rst:2518 msgid "" "To manually finalize an object, do not call this function directly; call :c:" "func:`PyObject_CallFinalizer` or :c:func:`PyObject_CallFinalizerFromDealloc` " "instead." msgstr "" #: ../../c-api/typeobj.rst:2522 msgid "" ":c:member:`~PyTypeObject.tp_finalize` should leave the current exception " "status unchanged. The recommended way to write a non-trivial finalizer is " "to back up the exception at the beginning by calling :c:func:" "`PyErr_GetRaisedException` and restore the exception at the end by calling :" "c:func:`PyErr_SetRaisedException`. If an exception is encountered in the " "middle of the finalizer, log and clear it with :c:func:" "`PyErr_WriteUnraisable` or :c:func:`PyErr_FormatUnraisable`. For example::" msgstr "" #: ../../c-api/typeobj.rst:2531 msgid "" "static void\n" "foo_finalize(PyObject *self)\n" "{\n" " // Save the current exception, if any.\n" " PyObject *exc = PyErr_GetRaisedException();\n" "\n" " // ...\n" "\n" " if (do_something_that_might_raise() != success_indicator) {\n" " PyErr_WriteUnraisable(self);\n" " goto done;\n" " }\n" "\n" "done:\n" " // Restore the saved exception. This silently discards any exception\n" " // raised above, so be sure to call PyErr_WriteUnraisable first if\n" " // necessary.\n" " PyErr_SetRaisedException(exc);\n" "}" msgstr "" #: ../../c-api/typeobj.rst:2559 msgid "" "Before version 3.8 it was necessary to set the :c:macro:" "`Py_TPFLAGS_HAVE_FINALIZE` flags bit in order for this field to be used. " "This is no longer required." msgstr "" #: ../../c-api/typeobj.rst:2565 msgid ":pep:`442`: \"Safe object finalization\"" msgstr "" #: ../../c-api/typeobj.rst:2568 msgid ":c:func:`PyObject_CallFinalizer`" msgstr "" #: ../../c-api/typeobj.rst:2569 msgid ":c:func:`PyObject_CallFinalizerFromDealloc`" msgstr "" #: ../../c-api/typeobj.rst:2576 msgid "" "A :ref:`vectorcall function ` to use for calls of this type " "object (rather than instances). In other words, ``tp_vectorcall`` can be " "used to optimize ``type.__call__``, which typically returns a new instance " "of *type*." msgstr "" #: ../../c-api/typeobj.rst:2581 msgid "" "As with any vectorcall function, if ``tp_vectorcall`` is ``NULL``, the " "*tp_call* protocol (``Py_TYPE(type)->tp_call``) is used instead." msgstr "" #: ../../c-api/typeobj.rst:2586 msgid "" "The :ref:`vectorcall protocol ` requires that the vectorcall " "function has the same behavior as the corresponding ``tp_call``. This means " "that ``type->tp_vectorcall`` must match the behavior of ``Py_TYPE(type)-" ">tp_call``." msgstr "" #: ../../c-api/typeobj.rst:2591 msgid "" "Specifically, if *type* uses the default metaclass, ``type->tp_vectorcall`` " "must behave the same as :c:expr:`PyType_Type->tp_call`, which:" msgstr "" #: ../../c-api/typeobj.rst:2595 msgid "calls ``type->tp_new``," msgstr "" #: ../../c-api/typeobj.rst:2597 msgid "" "if the result is a subclass of *type*, calls ``type->tp_init`` on the result " "of ``tp_new``, and" msgstr "" #: ../../c-api/typeobj.rst:2600 msgid "returns the result of ``tp_new``." msgstr "" #: ../../c-api/typeobj.rst:2602 msgid "" "Typically, ``tp_vectorcall`` is overridden to optimize this process for " "specific :c:member:`~PyTypeObject.tp_new` and :c:member:`~PyTypeObject." "tp_init`. When doing this for user-subclassable types, note that both can be " "overridden (using :py:func:`~object.__new__` and :py:func:`~object." "__init__`, respectively)." msgstr "" #: ../../c-api/typeobj.rst:2613 msgid "This field is never inherited." msgstr "" #: ../../c-api/typeobj.rst:2615 msgid "(the field exists since 3.8 but it's only used since 3.9)" msgstr "" #: ../../c-api/typeobj.rst:2620 msgid "Internal. Do not use." msgstr "" #: ../../c-api/typeobj.rst:2628 msgid "Static Types" msgstr "" #: ../../c-api/typeobj.rst:2630 msgid "" "Traditionally, types defined in C code are *static*, that is, a static :c:" "type:`PyTypeObject` structure is defined directly in code and initialized " "using :c:func:`PyType_Ready`." msgstr "" #: ../../c-api/typeobj.rst:2634 msgid "" "This results in types that are limited relative to types defined in Python:" msgstr "" #: ../../c-api/typeobj.rst:2636 msgid "" "Static types are limited to one base, i.e. they cannot use multiple " "inheritance." msgstr "" #: ../../c-api/typeobj.rst:2638 msgid "" "Static type objects (but not necessarily their instances) are immutable. It " "is not possible to add or modify the type object's attributes from Python." msgstr "" #: ../../c-api/typeobj.rst:2640 msgid "" "Static type objects are shared across :ref:`sub-interpreters `, so they should not include any subinterpreter-" "specific state." msgstr "" #: ../../c-api/typeobj.rst:2644 msgid "" "Also, since :c:type:`PyTypeObject` is only part of the :ref:`Limited API " "` as an opaque struct, any extension modules using static " "types must be compiled for a specific Python minor version." msgstr "" #: ../../c-api/typeobj.rst:2652 msgid "Heap Types" msgstr "" #: ../../c-api/typeobj.rst:2654 msgid "" "An alternative to :ref:`static types ` is *heap-allocated " "types*, or *heap types* for short, which correspond closely to classes " "created by Python's ``class`` statement. Heap types have the :c:macro:" "`Py_TPFLAGS_HEAPTYPE` flag set." msgstr "" #: ../../c-api/typeobj.rst:2659 msgid "" "This is done by filling a :c:type:`PyType_Spec` structure and calling :c:" "func:`PyType_FromSpec`, :c:func:`PyType_FromSpecWithBases`, :c:func:" "`PyType_FromModuleAndSpec`, or :c:func:`PyType_FromMetaclass`." msgstr "" #: ../../c-api/typeobj.rst:2667 msgid "Number Object Structures" msgstr "" #: ../../c-api/typeobj.rst:2674 msgid "" "This structure holds pointers to the functions which an object uses to " "implement the number protocol. Each function is used by the function of " "similar name documented in the :ref:`number` section." msgstr "" #: ../../c-api/typeobj.rst:2680 ../../c-api/typeobj.rst:3164 msgid "Here is the structure definition::" msgstr "" #: ../../c-api/typeobj.rst:2682 msgid "" "typedef struct {\n" " binaryfunc nb_add;\n" " binaryfunc nb_subtract;\n" " binaryfunc nb_multiply;\n" " binaryfunc nb_remainder;\n" " binaryfunc nb_divmod;\n" " ternaryfunc nb_power;\n" " unaryfunc nb_negative;\n" " unaryfunc nb_positive;\n" " unaryfunc nb_absolute;\n" " inquiry nb_bool;\n" " unaryfunc nb_invert;\n" " binaryfunc nb_lshift;\n" " binaryfunc nb_rshift;\n" " binaryfunc nb_and;\n" " binaryfunc nb_xor;\n" " binaryfunc nb_or;\n" " unaryfunc nb_int;\n" " void *nb_reserved;\n" " unaryfunc nb_float;\n" "\n" " binaryfunc nb_inplace_add;\n" " binaryfunc nb_inplace_subtract;\n" " binaryfunc nb_inplace_multiply;\n" " binaryfunc nb_inplace_remainder;\n" " ternaryfunc nb_inplace_power;\n" " binaryfunc nb_inplace_lshift;\n" " binaryfunc nb_inplace_rshift;\n" " binaryfunc nb_inplace_and;\n" " binaryfunc nb_inplace_xor;\n" " binaryfunc nb_inplace_or;\n" "\n" " binaryfunc nb_floor_divide;\n" " binaryfunc nb_true_divide;\n" " binaryfunc nb_inplace_floor_divide;\n" " binaryfunc nb_inplace_true_divide;\n" "\n" " unaryfunc nb_index;\n" "\n" " binaryfunc nb_matrix_multiply;\n" " binaryfunc nb_inplace_matrix_multiply;\n" "} PyNumberMethods;" msgstr "" #: ../../c-api/typeobj.rst:2727 msgid "" "Binary and ternary functions must check the type of all their operands, and " "implement the necessary conversions (at least one of the operands is an " "instance of the defined type). If the operation is not defined for the " "given operands, binary and ternary functions must return " "``Py_NotImplemented``, if another error occurred they must return ``NULL`` " "and set an exception." msgstr "" #: ../../c-api/typeobj.rst:2736 msgid "" "The :c:member:`~PyNumberMethods.nb_reserved` field should always be " "``NULL``. It was previously called :c:member:`!nb_long`, and was renamed in " "Python 3.0.1." msgstr "" #: ../../c-api/typeobj.rst:2887 msgid "Mapping Object Structures" msgstr "" #: ../../c-api/typeobj.rst:2894 msgid "" "This structure holds pointers to the functions which an object uses to " "implement the mapping protocol. It has three members:" msgstr "" #: ../../c-api/typeobj.rst:2901 msgid "" "This function is used by :c:func:`PyMapping_Size` and :c:func:" "`PyObject_Size`, and has the same signature. This slot may be set to " "``NULL`` if the object has no defined length." msgstr "" #: ../../c-api/typeobj.rst:2909 msgid "" "This function is used by :c:func:`PyObject_GetItem` and :c:func:" "`PySequence_GetSlice`, and has the same signature as :c:func:`!" "PyObject_GetItem`. This slot must be filled for the :c:func:" "`PyMapping_Check` function to return ``1``, it can be ``NULL`` otherwise." msgstr "" #: ../../c-api/typeobj.rst:2919 msgid "" "This function is used by :c:func:`PyObject_SetItem`, :c:func:" "`PyObject_DelItem`, :c:func:`PySequence_SetSlice` and :c:func:" "`PySequence_DelSlice`. It has the same signature as :c:func:`!" "PyObject_SetItem`, but *v* can also be set to ``NULL`` to delete an item. " "If this slot is ``NULL``, the object does not support item assignment and " "deletion." msgstr "" #: ../../c-api/typeobj.rst:2930 msgid "Sequence Object Structures" msgstr "" #: ../../c-api/typeobj.rst:2937 msgid "" "This structure holds pointers to the functions which an object uses to " "implement the sequence protocol." msgstr "" #: ../../c-api/typeobj.rst:2944 msgid "" "This function is used by :c:func:`PySequence_Size` and :c:func:" "`PyObject_Size`, and has the same signature. It is also used for handling " "negative indices via the :c:member:`~PySequenceMethods.sq_item` and the :c:" "member:`~PySequenceMethods.sq_ass_item` slots." msgstr "" #: ../../c-api/typeobj.rst:2953 msgid "" "This function is used by :c:func:`PySequence_Concat` and has the same " "signature. It is also used by the ``+`` operator, after trying the numeric " "addition via the :c:member:`~PyNumberMethods.nb_add` slot." msgstr "" #: ../../c-api/typeobj.rst:2961 msgid "" "This function is used by :c:func:`PySequence_Repeat` and has the same " "signature. It is also used by the ``*`` operator, after trying numeric " "multiplication via the :c:member:`~PyNumberMethods.nb_multiply` slot." msgstr "" #: ../../c-api/typeobj.rst:2969 msgid "" "This function is used by :c:func:`PySequence_GetItem` and has the same " "signature. It is also used by :c:func:`PyObject_GetItem`, after trying the " "subscription via the :c:member:`~PyMappingMethods.mp_subscript` slot. This " "slot must be filled for the :c:func:`PySequence_Check` function to return " "``1``, it can be ``NULL`` otherwise." msgstr "" #: ../../c-api/typeobj.rst:2975 msgid "" "Negative indexes are handled as follows: if the :c:member:" "`~PySequenceMethods.sq_length` slot is filled, it is called and the sequence " "length is used to compute a positive index which is passed to :c:member:" "`~PySequenceMethods.sq_item`. If :c:member:`!sq_length` is ``NULL``, the " "index is passed as is to the function." msgstr "" #: ../../c-api/typeobj.rst:2984 msgid "" "This function is used by :c:func:`PySequence_SetItem` and has the same " "signature. It is also used by :c:func:`PyObject_SetItem` and :c:func:" "`PyObject_DelItem`, after trying the item assignment and deletion via the :c:" "member:`~PyMappingMethods.mp_ass_subscript` slot. This slot may be left to " "``NULL`` if the object does not support item assignment and deletion." msgstr "" #: ../../c-api/typeobj.rst:2995 msgid "" "This function may be used by :c:func:`PySequence_Contains` and has the same " "signature. This slot may be left to ``NULL``, in this case :c:func:`!" "PySequence_Contains` simply traverses the sequence until it finds a match." msgstr "" #: ../../c-api/typeobj.rst:3004 msgid "" "This function is used by :c:func:`PySequence_InPlaceConcat` and has the same " "signature. It should modify its first operand, and return it. This slot " "may be left to ``NULL``, in this case :c:func:`!PySequence_InPlaceConcat` " "will fall back to :c:func:`PySequence_Concat`. It is also used by the " "augmented assignment ``+=``, after trying numeric in-place addition via the :" "c:member:`~PyNumberMethods.nb_inplace_add` slot." msgstr "" #: ../../c-api/typeobj.rst:3015 msgid "" "This function is used by :c:func:`PySequence_InPlaceRepeat` and has the same " "signature. It should modify its first operand, and return it. This slot " "may be left to ``NULL``, in this case :c:func:`!PySequence_InPlaceRepeat` " "will fall back to :c:func:`PySequence_Repeat`. It is also used by the " "augmented assignment ``*=``, after trying numeric in-place multiplication " "via the :c:member:`~PyNumberMethods.nb_inplace_multiply` slot." msgstr "" #: ../../c-api/typeobj.rst:3026 msgid "Buffer Object Structures" msgstr "" #: ../../c-api/typeobj.rst:3034 msgid "" "This structure holds pointers to the functions required by the :ref:`Buffer " "protocol `. The protocol defines how an exporter object can " "expose its internal data to consumer objects." msgstr "" #: ../../c-api/typeobj.rst:3042 ../../c-api/typeobj.rst:3111 #: ../../c-api/typeobj.rst:3177 ../../c-api/typeobj.rst:3190 #: ../../c-api/typeobj.rst:3204 ../../c-api/typeobj.rst:3216 msgid "The signature of this function is::" msgstr "" #: ../../c-api/typeobj.rst:3044 msgid "int (PyObject *exporter, Py_buffer *view, int flags);" msgstr "" #: ../../c-api/typeobj.rst:3046 msgid "" "Handle a request to *exporter* to fill in *view* as specified by *flags*. " "Except for point (3), an implementation of this function MUST take these " "steps:" msgstr "" #: ../../c-api/typeobj.rst:3050 msgid "" "Check if the request can be met. If not, raise :exc:`BufferError`, set " "``view->obj`` to ``NULL`` and return ``-1``." msgstr "" #: ../../c-api/typeobj.rst:3053 msgid "Fill in the requested fields." msgstr "" #: ../../c-api/typeobj.rst:3055 msgid "Increment an internal counter for the number of exports." msgstr "" #: ../../c-api/typeobj.rst:3057 msgid "Set ``view->obj`` to *exporter* and increment ``view->obj``." msgstr "" #: ../../c-api/typeobj.rst:3059 msgid "Return ``0``." msgstr "" #: ../../c-api/typeobj.rst:3061 ../../c-api/typeobj.rst:3124 msgid "**Thread safety:**" msgstr "" #: ../../c-api/typeobj.rst:3063 msgid "In the :term:`free-threaded build`, implementations must ensure:" msgstr "" #: ../../c-api/typeobj.rst:3065 msgid "The export counter increment in step (3) is atomic." msgstr "" #: ../../c-api/typeobj.rst:3067 msgid "" "The underlying buffer data remains valid and at a stable memory location for " "the lifetime of all exports." msgstr "" #: ../../c-api/typeobj.rst:3070 msgid "" "For objects that support resizing or reallocation (such as :class:" "`bytearray`), the export counter is checked atomically before such " "operations, and :exc:`BufferError` is raised if exports exist." msgstr "" #: ../../c-api/typeobj.rst:3074 msgid "The function is safe to call concurrently from multiple threads." msgstr "" #: ../../c-api/typeobj.rst:3076 msgid "" "See also :ref:`thread-safety-memoryview` for the Python-level thread safety " "guarantees of :class:`memoryview` objects." msgstr "" #: ../../c-api/typeobj.rst:3079 msgid "" "If *exporter* is part of a chain or tree of buffer providers, two main " "schemes can be used:" msgstr "" #: ../../c-api/typeobj.rst:3082 msgid "" "Re-export: Each member of the tree acts as the exporting object and sets " "``view->obj`` to a new reference to itself." msgstr "" #: ../../c-api/typeobj.rst:3085 msgid "" "Redirect: The buffer request is redirected to the root object of the tree. " "Here, ``view->obj`` will be a new reference to the root object." msgstr "" #: ../../c-api/typeobj.rst:3089 msgid "" "The individual fields of *view* are described in section :ref:`Buffer " "structure `, the rules how an exporter must react to " "specific requests are in section :ref:`Buffer request types `." msgstr "" #: ../../c-api/typeobj.rst:3094 msgid "" "All memory pointed to in the :c:type:`Py_buffer` structure belongs to the " "exporter and must remain valid until there are no consumers left. :c:member:" "`~Py_buffer.format`, :c:member:`~Py_buffer.shape`, :c:member:`~Py_buffer." "strides`, :c:member:`~Py_buffer.suboffsets` and :c:member:`~Py_buffer." "internal` are read-only for the consumer." msgstr "" #: ../../c-api/typeobj.rst:3101 msgid "" ":c:func:`PyBuffer_FillInfo` provides an easy way of exposing a simple bytes " "buffer while dealing correctly with all request types." msgstr "" #: ../../c-api/typeobj.rst:3104 msgid "" ":c:func:`PyObject_GetBuffer` is the interface for the consumer that wraps " "this function." msgstr "" #: ../../c-api/typeobj.rst:3113 msgid "void (PyObject *exporter, Py_buffer *view);" msgstr "" #: ../../c-api/typeobj.rst:3115 msgid "" "Handle a request to release the resources of the buffer. If no resources " "need to be released, :c:member:`PyBufferProcs.bf_releasebuffer` may be " "``NULL``. Otherwise, a standard implementation of this function will take " "these optional steps:" msgstr "" #: ../../c-api/typeobj.rst:3120 msgid "Decrement an internal counter for the number of exports." msgstr "" #: ../../c-api/typeobj.rst:3122 msgid "If the counter is ``0``, free all memory associated with *view*." msgstr "" #: ../../c-api/typeobj.rst:3126 msgid "In the :term:`free-threaded build`:" msgstr "" #: ../../c-api/typeobj.rst:3128 msgid "The export counter decrement in step (1) must be atomic." msgstr "" #: ../../c-api/typeobj.rst:3130 msgid "" "Resource cleanup when the counter reaches zero must be done atomically, as " "the final release may race with concurrent releases from other threads and " "deallocation must only happen once." msgstr "" #: ../../c-api/typeobj.rst:3134 msgid "" "The exporter MUST use the :c:member:`~Py_buffer.internal` field to keep " "track of buffer-specific resources. This field is guaranteed to remain " "constant, while a consumer MAY pass a copy of the original buffer as the " "*view* argument." msgstr "" #: ../../c-api/typeobj.rst:3140 msgid "" "This function MUST NOT decrement ``view->obj``, since that is done " "automatically in :c:func:`PyBuffer_Release` (this scheme is useful for " "breaking reference cycles)." msgstr "" #: ../../c-api/typeobj.rst:3145 msgid "" ":c:func:`PyBuffer_Release` is the interface for the consumer that wraps this " "function." msgstr "" #: ../../c-api/typeobj.rst:3153 msgid "Async Object Structures" msgstr "" #: ../../c-api/typeobj.rst:3161 msgid "" "This structure holds pointers to the functions required to implement :term:" "`awaitable` and :term:`asynchronous iterator` objects." msgstr "" #: ../../c-api/typeobj.rst:3166 msgid "" "typedef struct {\n" " unaryfunc am_await;\n" " unaryfunc am_aiter;\n" " unaryfunc am_anext;\n" " sendfunc am_send;\n" "} PyAsyncMethods;" msgstr "" #: ../../c-api/typeobj.rst:3179 msgid "PyObject *am_await(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:3181 msgid "" "The returned object must be an :term:`iterator`, i.e. :c:func:`PyIter_Check` " "must return ``1`` for it." msgstr "" #: ../../c-api/typeobj.rst:3184 msgid "" "This slot may be set to ``NULL`` if an object is not an :term:`awaitable`." msgstr "" #: ../../c-api/typeobj.rst:3192 msgid "PyObject *am_aiter(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:3194 msgid "" "Must return an :term:`asynchronous iterator` object. See :meth:`~object." "__anext__` for details." msgstr "" #: ../../c-api/typeobj.rst:3197 msgid "" "This slot may be set to ``NULL`` if an object does not implement " "asynchronous iteration protocol." msgstr "" #: ../../c-api/typeobj.rst:3206 msgid "PyObject *am_anext(PyObject *self);" msgstr "" #: ../../c-api/typeobj.rst:3208 msgid "" "Must return an :term:`awaitable` object. See :meth:`~object.__anext__` for " "details. This slot may be set to ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:3218 msgid "PySendResult am_send(PyObject *self, PyObject *arg, PyObject **result);" msgstr "" #: ../../c-api/typeobj.rst:3220 msgid "" "See :c:func:`PyIter_Send` for details. This slot may be set to ``NULL``." msgstr "" #: ../../c-api/typeobj.rst:3229 msgid "Slot Type typedefs" msgstr "" #: ../../c-api/typeobj.rst:3233 msgid "" "The purpose of this function is to separate memory allocation from memory " "initialization. It should return a pointer to a block of memory of adequate " "length for the instance, suitably aligned, and initialized to zeros, but " "with :c:member:`~PyObject.ob_refcnt` set to ``1`` and :c:member:`~PyObject." "ob_type` set to the type argument. If the type's :c:member:`~PyTypeObject." "tp_itemsize` is non-zero, the object's :c:member:`~PyVarObject.ob_size` " "field should be initialized to *nitems* and the length of the allocated " "memory block should be ``tp_basicsize + nitems*tp_itemsize``, rounded up to " "a multiple of ``sizeof(void*)``; otherwise, *nitems* is not used and the " "length of the block should be :c:member:`~PyTypeObject.tp_basicsize`." msgstr "" #: ../../c-api/typeobj.rst:3243 msgid "" "This function should not do any other instance initialization, not even to " "allocate additional memory; that should be done by :c:member:`~PyTypeObject." "tp_new`." msgstr "" #: ../../c-api/typeobj.rst:3250 msgid "See :c:member:`~PyTypeObject.tp_free`." msgstr "" #: ../../c-api/typeobj.rst:3254 msgid "See :c:member:`~PyTypeObject.tp_new`." msgstr "" #: ../../c-api/typeobj.rst:3258 msgid "See :c:member:`~PyTypeObject.tp_init`." msgstr "" #: ../../c-api/typeobj.rst:3262 msgid "See :c:member:`~PyTypeObject.tp_repr`." msgstr "" #: ../../c-api/typeobj.rst:3266 ../../c-api/typeobj.rst:3275 msgid "Return the value of the named attribute for the object." msgstr "" #: ../../c-api/typeobj.rst:3270 ../../c-api/typeobj.rst:3281 msgid "" "Set the value of the named attribute for the object. The value argument is " "set to ``NULL`` to delete the attribute." msgstr "" #: ../../c-api/typeobj.rst:3277 msgid "See :c:member:`~PyTypeObject.tp_getattro`." msgstr "" #: ../../c-api/typeobj.rst:3284 msgid "See :c:member:`~PyTypeObject.tp_setattro`." msgstr "" #: ../../c-api/typeobj.rst:3288 msgid "See :c:member:`~PyTypeObject.tp_descr_get`." msgstr "" #: ../../c-api/typeobj.rst:3292 msgid "See :c:member:`~PyTypeObject.tp_descr_set`." msgstr "" #: ../../c-api/typeobj.rst:3296 msgid "See :c:member:`~PyTypeObject.tp_hash`." msgstr "" #: ../../c-api/typeobj.rst:3300 msgid "See :c:member:`~PyTypeObject.tp_richcompare`." msgstr "" #: ../../c-api/typeobj.rst:3304 msgid "See :c:member:`~PyTypeObject.tp_iter`." msgstr "" #: ../../c-api/typeobj.rst:3308 msgid "See :c:member:`~PyTypeObject.tp_iternext`." msgstr "" #: ../../c-api/typeobj.rst:3322 msgid "See :c:member:`~PyAsyncMethods.am_send`." msgstr "" #: ../../c-api/typeobj.rst:3338 msgid "Examples" msgstr "" #: ../../c-api/typeobj.rst:3340 msgid "" "The following are simple examples of Python type definitions. They include " "common usage you may encounter. Some demonstrate tricky corner cases. For " "more examples, practical info, and a tutorial, see :ref:`defining-new-types` " "and :ref:`new-types-topics`." msgstr "" #: ../../c-api/typeobj.rst:3345 msgid "A basic :ref:`static type `::" msgstr "" #: ../../c-api/typeobj.rst:3347 msgid "" "typedef struct {\n" " PyObject_HEAD\n" " const char *data;\n" "} MyObject;\n" "\n" "static PyTypeObject MyObject_Type = {\n" " PyVarObject_HEAD_INIT(NULL, 0)\n" " .tp_name = \"mymod.MyObject\",\n" " .tp_basicsize = sizeof(MyObject),\n" " .tp_doc = PyDoc_STR(\"My objects\"),\n" " .tp_new = myobj_new,\n" " .tp_dealloc = (destructor)myobj_dealloc,\n" " .tp_repr = (reprfunc)myobj_repr,\n" "};" msgstr "" #: ../../c-api/typeobj.rst:3362 msgid "" "You may also find older code (especially in the CPython code base) with a " "more verbose initializer::" msgstr "" #: ../../c-api/typeobj.rst:3365 msgid "" "static PyTypeObject MyObject_Type = {\n" " PyVarObject_HEAD_INIT(NULL, 0)\n" " \"mymod.MyObject\", /* tp_name */\n" " sizeof(MyObject), /* tp_basicsize */\n" " 0, /* tp_itemsize */\n" " (destructor)myobj_dealloc, /* tp_dealloc */\n" " 0, /* tp_vectorcall_offset */\n" " 0, /* tp_getattr */\n" " 0, /* tp_setattr */\n" " 0, /* tp_as_async */\n" " (reprfunc)myobj_repr, /* tp_repr */\n" " 0, /* tp_as_number */\n" " 0, /* tp_as_sequence */\n" " 0, /* tp_as_mapping */\n" " 0, /* tp_hash */\n" " 0, /* tp_call */\n" " 0, /* tp_str */\n" " 0, /* tp_getattro */\n" " 0, /* tp_setattro */\n" " 0, /* tp_as_buffer */\n" " 0, /* tp_flags */\n" " PyDoc_STR(\"My objects\"), /* tp_doc */\n" " 0, /* tp_traverse */\n" " 0, /* tp_clear */\n" " 0, /* tp_richcompare */\n" " 0, /* tp_weaklistoffset */\n" " 0, /* tp_iter */\n" " 0, /* tp_iternext */\n" " 0, /* tp_methods */\n" " 0, /* tp_members */\n" " 0, /* tp_getset */\n" " 0, /* tp_base */\n" " 0, /* tp_dict */\n" " 0, /* tp_descr_get */\n" " 0, /* tp_descr_set */\n" " 0, /* tp_dictoffset */\n" " 0, /* tp_init */\n" " 0, /* tp_alloc */\n" " myobj_new, /* tp_new */\n" "};" msgstr "" #: ../../c-api/typeobj.rst:3406 msgid "A type that supports weakrefs, instance dicts, and hashing::" msgstr "" #: ../../c-api/typeobj.rst:3408 msgid "" "typedef struct {\n" " PyObject_HEAD\n" " const char *data;\n" "} MyObject;\n" "\n" "static PyTypeObject MyObject_Type = {\n" " PyVarObject_HEAD_INIT(NULL, 0)\n" " .tp_name = \"mymod.MyObject\",\n" " .tp_basicsize = sizeof(MyObject),\n" " .tp_doc = PyDoc_STR(\"My objects\"),\n" " .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |\n" " Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_MANAGED_DICT |\n" " Py_TPFLAGS_MANAGED_WEAKREF,\n" " .tp_new = myobj_new,\n" " .tp_traverse = (traverseproc)myobj_traverse,\n" " .tp_clear = (inquiry)myobj_clear,\n" " .tp_alloc = PyType_GenericNew,\n" " .tp_dealloc = (destructor)myobj_dealloc,\n" " .tp_repr = (reprfunc)myobj_repr,\n" " .tp_hash = (hashfunc)myobj_hash,\n" " .tp_richcompare = PyBaseObject_Type.tp_richcompare,\n" "};" msgstr "" #: ../../c-api/typeobj.rst:3431 msgid "" "A str subclass that cannot be subclassed and cannot be called to create " "instances (e.g. uses a separate factory func) using :c:macro:" "`Py_TPFLAGS_DISALLOW_INSTANTIATION` flag::" msgstr "" #: ../../c-api/typeobj.rst:3435 msgid "" "typedef struct {\n" " PyUnicodeObject raw;\n" " char *extra;\n" "} MyStr;\n" "\n" "static PyTypeObject MyStr_Type = {\n" " PyVarObject_HEAD_INIT(NULL, 0)\n" " .tp_name = \"mymod.MyStr\",\n" " .tp_basicsize = sizeof(MyStr),\n" " .tp_base = NULL, // set to &PyUnicode_Type in module init\n" " .tp_doc = PyDoc_STR(\"my custom str\"),\n" " .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,\n" " .tp_repr = (reprfunc)myobj_repr,\n" "};" msgstr "" #: ../../c-api/typeobj.rst:3450 msgid "" "The simplest :ref:`static type ` with fixed-length instances::" msgstr "" #: ../../c-api/typeobj.rst:3452 msgid "" "typedef struct {\n" " PyObject_HEAD\n" "} MyObject;\n" "\n" "static PyTypeObject MyObject_Type = {\n" " PyVarObject_HEAD_INIT(NULL, 0)\n" " .tp_name = \"mymod.MyObject\",\n" "};" msgstr "" #: ../../c-api/typeobj.rst:3461 msgid "" "The simplest :ref:`static type ` with variable-length " "instances::" msgstr "" #: ../../c-api/typeobj.rst:3463 msgid "" "typedef struct {\n" " PyObject_VAR_HEAD\n" " const char *data[1];\n" "} MyObject;\n" "\n" "static PyTypeObject MyObject_Type = {\n" " PyVarObject_HEAD_INIT(NULL, 0)\n" " .tp_name = \"mymod.MyObject\",\n" " .tp_basicsize = sizeof(MyObject) - sizeof(char *),\n" " .tp_itemsize = sizeof(char *),\n" "};" msgstr "" #: ../../c-api/typeobj.rst:920 ../../c-api/typeobj.rst:987 msgid "built-in function" msgstr "" #: ../../c-api/typeobj.rst:920 msgid "repr" msgstr "" #: ../../c-api/typeobj.rst:987 msgid "hash" msgstr ""