# 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 ""
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 ""
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 ``''`` 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 ```` 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 "``=``"
#: ../../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 ""