Typobjekte¶
-
type PyTypeObject¶
- Teil der Limited API (als opaker Struct).
Die C-Struktur der Objekte, die zur Beschreibung von integrierten Typen verwendet werden.
-
PyTypeObject PyType_Type¶
- Teil der Stable ABI.
Dies ist das Typobjekt für Typobjekte; es ist dasselbe Objekt wie
typein der Python-Schicht.
-
int PyType_Check(PyObject *o)¶
Gibt einen von Null verschiedenen Wert zurück, wenn das Objekt o ein Typobjekt ist, einschließlich Instanzen von Typen, die vom Standard-Typobjekt abgeleitet sind. Gibt in allen anderen Fällen 0 zurück. Diese Funktion ist immer erfolgreich.
-
int PyType_CheckExact(PyObject *o)¶
Gibt einen von Null verschiedenen Wert zurück, wenn das Objekt o ein Typobjekt ist, aber keine Unterklasse des Standard-Typobjekts. Gibt in allen anderen Fällen 0 zurück. Diese Funktion ist immer erfolgreich.
-
unsigned int PyType_ClearCache()¶
- Teil der Stable ABI.
Löscht den internen Suchcache. Gibt den aktuellen Versions-Tag zurück.
-
unsigned long PyType_GetFlags(PyTypeObject *type)¶
- Teil der Stable ABI.
Gibt das Mitglied
tp_flagsvon type zurück. Diese Funktion ist hauptsächlich für die Verwendung mitPy_LIMITED_APIvorgesehen; die einzelnen Flag-Bits sind über Python-Versionen hinweg stabil, aber der Zugriff auftp_flagsselbst ist nicht Teil der begrenzten API.Hinzugefügt in Version 3.2.
Geändert in Version 3.4: Der Rückgabewert ist jetzt
unsigned longanstelle vonlong.
-
PyObject *PyType_GetDict(PyTypeObject *type)¶
Gibt den internen Namensraum des Typobjekts zurück, der sonst nur über ein schreibgeschütztes Proxy (
cls.__dict__) zugänglich ist. Dies ist ein Ersatz für den direkten Zugriff auftp_dict. Das zurückgegebene Dictionary muss als schreibgeschützt behandelt werden.Diese Funktion ist für spezifische Einbettungs- und Sprachbindungsfälle gedacht, bei denen ein direkter Zugriff auf das Dictionary erforderlich ist und ein indirekter Zugriff (z. B. über den Proxy oder
PyObject_GetAttr()) nicht ausreicht.Erweiterungsmodule sollten weiterhin
tp_dictdirekt oder indirekt verwenden, wenn sie ihre eigenen Typen einrichten.Hinzugefügt in Version 3.12.
-
void PyType_Modified(PyTypeObject *type)¶
- Teil der Stable ABI.
Macht den internen Suchcache für den Typ und alle seine Untertypen ungültig. Diese Funktion muss nach jeder manuellen Änderung der Attribute oder Basisklassen des Typs aufgerufen werden.
-
int PyType_AddWatcher(PyType_WatchCallback callback)¶
Registriert callback als Typ-Watcher. Gibt eine nicht-negative Ganzzahl-ID zurück, die bei zukünftigen Aufrufen von
PyType_Watch()übergeben werden muss. Im Fehlerfall (z. B. keine weiteren Watcher-IDs verfügbar) gibt die Funktion-1zurück und setzt eine Ausnahme.In freithread-fähigen Builds ist
PyType_AddWatcher()nicht threadsicher, daher muss sie beim Start aufgerufen werden (bevor der erste Thread gestartet wird).Hinzugefügt in Version 3.12.
-
int PyType_ClearWatcher(int watcher_id)¶
Löscht den durch watcher_id identifizierten Watcher (der zuvor von
PyType_AddWatcher()zurückgegeben wurde). Gibt bei Erfolg 0 zurück, bei einem Fehler (z. B. wenn watcher_id nie registriert wurde) -1.Eine Erweiterung sollte niemals
PyType_ClearWatchermit einer watcher_id aufrufen, die ihr nicht durch einen vorherigen Aufruf vonPyType_AddWatcher()zurückgegeben wurde.Hinzugefügt in Version 3.12.
-
int PyType_Watch(int watcher_id, PyObject *type)¶
Markiert type als beobachtet. Der Callback mit der von
PyType_AddWatcher()gewährten watcher_id wird aufgerufen, wann immerPyType_Modified()eine Änderung an type meldet. (Der Callback kann nur einmal für eine Reihe aufeinanderfolgender Änderungen an type aufgerufen werden, wenn_PyType_Lookup()zwischen den Änderungen nicht auf type aufgerufen wird; dies ist ein Implementierungsdetail und kann sich ändern.)Eine Erweiterung sollte niemals
PyType_Watchmit einer watcher_id aufrufen, die ihr nicht durch einen vorherigen Aufruf vonPyType_AddWatcher()zurückgegeben wurde.Hinzugefügt in Version 3.12.
-
typedef int (*PyType_WatchCallback)(PyObject *type)¶
Typ einer Typ-Watcher-Callback-Funktion.
Der Callback darf type nicht ändern oder dazu führen, dass
PyType_Modified()für type oder einen Typ in seiner MRO aufgerufen wird; ein Verstoß gegen diese Regel kann zu einer Endlosschleife führen.Hinzugefügt in Version 3.12.
-
int PyType_HasFeature(PyTypeObject *o, int feature)¶
Gibt einen von Null verschiedenen Wert zurück, wenn das Typobjekt o das Feature feature setzt. Typ-Features werden durch einzelne Bit-Flags gekennzeichnet.
-
int PyType_IS_GC(PyTypeObject *o)¶
Gibt wahr zurück, wenn das Typobjekt die Unterstützung für den Zyklendetektor enthält; dies prüft das Typ-Flag
Py_TPFLAGS_HAVE_GC.
-
int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)¶
- Teil der Stable ABI.
Gibt wahr zurück, wenn a eine Unterklasse von b ist.
Diese Funktion prüft nur auf tatsächliche Unterklassen, was bedeutet, dass
__subclasscheck__()für b nicht aufgerufen wird. Rufen SiePyObject_IsSubclass()auf, um dieselbe Prüfung durchzuführen, dieissubclass()durchführen würde.
-
PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Generischer Handler für den Slot
tp_alloceines Typobjekts. Verwendet den Standard-Speicherallokationsmechanismus von Python, um Speicher für eine neue Instanz zu allozieren, den Speicher zu nullen und dann den Speicher zu initialisieren, als obPyObject_Init()oderPyObject_InitVar()aufgerufen worden wären.Rufen Sie diese Funktion nicht direkt zur Allokation von Speicher für ein Objekt auf; rufen Sie stattdessen den Slot
tp_allocdes Typs auf.Für Typen, die die Speicherbereinigung unterstützen (d. h. das Flag
Py_TPFLAGS_HAVE_GCist gesetzt), verhält sich diese Funktion wiePyObject_GC_NewoderPyObject_GC_NewVar(außer der Speicher wird garantiert vor der Initialisierung genullt) und sollte intp_freemitPyObject_GC_Del()gepaart werden. Andernfalls verhält sie sich wiePyObject_NewoderPyObject_NewVar(außer der Speicher wird garantiert vor der Initialisierung genullt) und sollte intp_freemitPyObject_Free()gepaart werden.
-
PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Generischer Handler für den Slot
tp_neweines Typobjekts. Erstellt eine neue Instanz unter Verwendung des Slotstp_allocdes Typs und gibt das resultierende Objekt zurück.
-
int PyType_Ready(PyTypeObject *type)¶
- Teil der Stable ABI.
Finalisiert ein Typobjekt. Dies sollte für alle Typobjekte aufgerufen werden, um deren Initialisierung abzuschließen. Diese Funktion ist dafür verantwortlich, geerbte Slots von der Basisklasse eines Typs hinzuzufügen. Gibt bei Erfolg 0 zurück oder bei einem Fehler -1 und setzt eine Ausnahme.
Hinweis
Wenn einige der Basisklassen das GC-Protokoll implementieren und der bereitgestellte Typ nicht
Py_TPFLAGS_HAVE_GCin seinen Flags enthält, wird das GC-Protokoll automatisch von seinen Eltern übernommen. Umgekehrt, wenn der zu erstellende TypPy_TPFLAGS_HAVE_GCin seinen Flags enthält, **muss** er das GC-Protokoll selbst implementieren, indem er zumindest den Handlertp_traverseimplementiert.
-
PyObject *PyType_GetName(PyTypeObject *type)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI seit Version 3.11.
Gibt den Namen des Typs zurück. Entspricht dem Abrufen des Attributs
__name__des Typs.Hinzugefügt in Version 3.11.
-
PyObject *PyType_GetQualName(PyTypeObject *type)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI seit Version 3.11.
Gibt den qualifizierten Namen des Typs zurück. Entspricht dem Abrufen des Attributs
__qualname__des Typs.Hinzugefügt in Version 3.11.
-
PyObject *PyType_GetFullyQualifiedName(PyTypeObject *type)¶
- Teil des Stable ABI seit Version 3.13.
Gibt den vollqualifizierten Namen des Typs zurück. Entspricht
f"{type.__module__}.{type.__qualname__}"odertype.__qualname__, wenntype.__module__keine Zeichenkette ist oder gleich"builtins"ist.Hinzugefügt in Version 3.13.
-
PyObject *PyType_GetModuleName(PyTypeObject *type)¶
- Teil des Stable ABI seit Version 3.13.
Gibt den Modulnamen des Typs zurück. Entspricht dem Abrufen des Attributs
type.__module__des Typs.Hinzugefügt in Version 3.13.
-
void *PyType_GetSlot(PyTypeObject *type, int slot)¶
- Teil der Stabilen ABI seit Version 3.4.
Gibt den Funktionszeiger zurück, der im angegebenen Slot gespeichert ist. Wenn das Ergebnis
NULList, deutet dies darauf hin, dass entweder der SlotNULList oder dass die Funktion mit ungültigen Parametern aufgerufen wurde. Aufrufer werden den Ergebniszeiger typischerweise in den entsprechenden Funktionstyp umwandeln.Siehe
PyType_Slot.slotfür mögliche Werte des Arguments slot.Hinzugefügt in Version 3.4.
Geändert in Version 3.10:
PyType_GetSlot()kann jetzt alle Typen akzeptieren. Zuvor war es auf Heap-Typen beschränkt.
-
PyObject *PyType_GetModule(PyTypeObject *type)¶
- Teil der Stable ABI seit Version 3.10.
Gibt das Modulobjekt zurück, das mit dem gegebenen Typ verknüpft ist, wenn der Typ mit
PyType_FromModuleAndSpec()erstellt wurde.Wenn kein Modul mit dem gegebenen Typ verknüpft ist, wird
TypeErrorgesetzt undNULLzurückgegeben.Diese Funktion wird normalerweise verwendet, um das Modul zu erhalten, in dem eine Methode definiert ist. Beachten Sie, dass in einer solchen Methode
PyType_GetModule(Py_TYPE(self))möglicherweise nicht das beabsichtigte Ergebnis liefert.Py_TYPE(self)kann eine *Unterklasse* der beabsichtigten Klasse sein, und Unterklassen sind nicht notwendigerweise im selben Modul definiert wie ihre Oberklasse. SiehePyCMethod, um die Klasse zu erhalten, die die Methode definiert. SiehePyType_GetModuleByDef()für Fälle, in denenPyCMethodnicht verwendet werden kann.Hinzugefügt in Version 3.9.
-
void *PyType_GetModuleState(PyTypeObject *type)¶
- Teil der Stable ABI seit Version 3.10.
Gibt den Zustand des Modulobjekts zurück, das mit dem gegebenen Typ verknüpft ist. Dies ist eine Abkürzung für den Aufruf von
PyModule_GetState()auf dem Ergebnis vonPyType_GetModule().Wenn kein Modul mit dem gegebenen Typ verknüpft ist, wird
TypeErrorgesetzt undNULLzurückgegeben.Wenn der type ein zugehöriges Modul hat, dessen Zustand aber
NULList, wirdNULLzurückgegeben, ohne eine Ausnahme zu setzen.Hinzugefügt in Version 3.9.
-
PyObject *PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)¶
- Rückgabewert: Ausgeliehene Referenz. Teil der Stabilen ABI seit Version 3.13.
Findet die erste Oberklasse, deren Modul aus der gegebenen
PyModuleDefdef erstellt wurde, und gibt dieses Modul zurück.Wenn kein Modul gefunden wird, wird eine
TypeErrorausgelöst undNULLzurückgegeben.Diese Funktion ist für die Verwendung zusammen mit
PyModule_GetState()bestimmt, um Modulzustände von Slot-Methoden (wietp_initodernb_add) und anderen Stellen zu erhalten, wo die definierende Klasse einer Methode nicht über diePyCMethod-Aufrufkonvention übergeben werden kann.Die zurückgegebene Referenz wird von type **ausgeliehen** und ist gültig, solange Sie eine Referenz auf type halten. Geben Sie sie nicht mit
Py_DECREF()oder Ähnlichem frei.Hinzugefügt in Version 3.11.
-
int PyType_GetBaseByToken(PyTypeObject *type, void *token, PyTypeObject **result)¶
- Teil des Stable ABI seit Version 3.14.
Findet die erste Oberklasse in der Method Resolution Order von type, deren
Py_tp_token-Token mit dem gegebenen übereinstimmt.Wenn gefunden, wird *result auf eine neue **starke Referenz** darauf gesetzt und 1 zurückgegeben.
Wenn nicht gefunden, wird *result auf
NULLgesetzt und 0 zurückgegeben.Bei einem Fehler wird *result auf
NULLgesetzt und -1 mit einer gesetzten Ausnahme zurückgegeben.
Das Argument result kann
NULLsein, in diesem Fall wird *result nicht gesetzt. Verwenden Sie dies, wenn Sie nur den Rückgabewert benötigen.Das Argument token darf nicht
NULLsein.Hinzugefügt in Version 3.14.
-
int PyUnstable_Type_AssignVersionTag(PyTypeObject *type)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Versucht, dem gegebenen Typ ein Versionstag zuzuweisen.
Gibt 1 zurück, wenn der Typ bereits einen gültigen Versionstag hatte oder ein neuer zugewiesen wurde, oder 0, wenn kein neuer Tag zugewiesen werden konnte.
Hinzugefügt in Version 3.12.
Erstellen von Heap-alloziierten Typen¶
Die folgenden Funktionen und Strukturen werden zur Erstellung von Heap-Typen verwendet.
-
PyObject *PyType_FromMetaclass(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases)¶
- Teil der Stable ABI seit Version 3.12.
Erstellt und gibt einen Heap-Typ aus dem Spec zurück (siehe
Py_TPFLAGS_HEAPTYPE).Die Metaklasse metaclass wird verwendet, um das resultierende Typobjekt zu konstruieren. Wenn metaclass
NULList, wird die Metaklasse von bases abgeleitet (oder von den Py_tp_base[s] Slots, wenn basesNULList, siehe unten).Metaklassen, die
tp_newüberschreiben, werden nicht unterstützt, es sei denn,tp_newistNULL.Das Argument bases kann verwendet werden, um Basisklassen anzugeben; es kann entweder nur eine Klasse oder ein Tupel von Klassen sein. Wenn bases
NULList, wird stattdessen der Slot Py_tp_bases verwendet. Wenn dieser ebenfallsNULList, wird stattdessen der Slot Py_tp_base verwendet. Wenn auch dieserNULList, erbt der neue Typ vonobject.Das Argument module kann verwendet werden, um das Modul aufzuzeichnen, in dem die neue Klasse definiert ist. Es muss ein Modulobjekt oder
NULLsein. Wenn nichtNULL, wird das Modul mit dem neuen Typ verknüpft und kann später mitPyType_GetModule()abgerufen werden. Das verknüpfte Modul wird von Unterklassen nicht vererbt; es muss für jede Klasse einzeln angegeben werden.Diese Funktion ruft
PyType_Ready()für den neuen Typ auf.Beachten Sie, dass diese Funktion *nicht* vollständig mit dem Verhalten des Aufrufs von
type()oder der Verwendung derclass-Anweisung übereinstimmt. Bei benutzerdefinierten Basistypen oder Metaklassen ist es vorzuziehen, type (oder die Metaklasse) aufzurufen, anstattPyType_From*-Funktionen zu verwenden. Insbesondere__new__()wird für die neue Klasse nicht aufgerufen (und muss auftype.__new__gesetzt werden).__init__()wird für die neue Klasse nicht aufgerufen.__init_subclass__()wird für keine Basisklasse aufgerufen.__set_name__()wird für neue Deskriptoren nicht aufgerufen.
Hinzugefügt in Version 3.12.
-
PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.10.
Entspricht
PyType_FromMetaclass(NULL, module, spec, bases).Hinzugefügt in Version 3.9.
Geändert in Version 3.10: Die Funktion akzeptiert jetzt eine einzelne Klasse als Argument bases und
NULLals Slottp_doc.Geändert in Version 3.12: Die Funktion findet und verwendet jetzt eine Metaklasse, die den bereitgestellten Basisklassen entspricht. Zuvor wurden nur
type-Instanzen zurückgegeben.Die
tp_newder Metaklasse wird *ignoriert*, was zu einer unvollständigen Initialisierung führen kann. Das Erstellen von Klassen, deren Metaklassetp_newüberschreibt, ist veraltet.Geändert in Version 3.14: Das Erstellen von Klassen, deren Metaklasse
tp_newüberschreibt, ist nicht mehr zulässig.
-
PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI seit Version 3.3.
Entspricht
PyType_FromMetaclass(NULL, NULL, spec, bases).Hinzugefügt in Version 3.3.
Geändert in Version 3.12: Die Funktion findet und verwendet jetzt eine Metaklasse, die den bereitgestellten Basisklassen entspricht. Zuvor wurden nur
type-Instanzen zurückgegeben.Die
tp_newder Metaklasse wird *ignoriert*, was zu einer unvollständigen Initialisierung führen kann. Das Erstellen von Klassen, deren Metaklassetp_newüberschreibt, ist veraltet.Geändert in Version 3.14: Das Erstellen von Klassen, deren Metaklasse
tp_newüberschreibt, ist nicht mehr zulässig.
-
PyObject *PyType_FromSpec(PyType_Spec *spec)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Entspricht
PyType_FromMetaclass(NULL, NULL, spec, NULL).Geändert in Version 3.12: Die Funktion findet und verwendet jetzt eine Metaklasse, die den in den Py_tp_base[s] Slots bereitgestellten Basisklassen entspricht. Zuvor wurden nur
type-Instanzen zurückgegeben.Die
tp_newder Metaklasse wird *ignoriert*, was zu einer unvollständigen Initialisierung führen kann. Das Erstellen von Klassen, deren Metaklassetp_newüberschreibt, ist veraltet.Geändert in Version 3.14: Das Erstellen von Klassen, deren Metaklasse
tp_newüberschreibt, ist nicht mehr zulässig.
-
int PyType_Freeze(PyTypeObject *type)¶
- Teil des Stable ABI seit Version 3.14.
Macht einen Typ unveränderlich: setzt das Flag
Py_TPFLAGS_IMMUTABLETYPE.Alle Basisklassen von type müssen unveränderlich sein.
Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt und-1zurückgegeben.Der Typ darf nicht verwendet werden, bevor er unveränderlich gemacht wurde. Zum Beispiel dürfen keine Typinstanzen erstellt werden, bevor der Typ unveränderlich gemacht wurde.
Hinzugefügt in Version 3.14.
-
type PyType_Spec¶
- Teil der Stable ABI (einschließlich aller Member).
Struktur, die das Verhalten eines Typs definiert.
-
const char *name¶
Name des Typs, der zum Setzen von
PyTypeObject.tp_nameverwendet wird.
-
int basicsize¶
Wenn positiv, gibt die Größe der Instanz in Bytes an. Sie wird zum Setzen von
PyTypeObject.tp_basicsizeverwendet.Wenn Null, gibt an, dass
tp_basicsizegeerbt werden soll.Wenn negativ, gibt der Betrag an, wie viel Platz Instanzen der Klasse *zusätzlich* zur Superklasse benötigen. Verwenden Sie
PyObject_GetTypeData(), um einen Zeiger auf subclass-spezifischen Speicher zu erhalten, der auf diese Weise reserviert wurde. Für negativebasicsizefügt Python bei Bedarf Padding ein, um die Ausrichtungsvoraussetzungen vontp_basicsizezu erfüllen.Geändert in Version 3.12: Zuvor konnte dieses Feld nicht negativ sein.
-
int itemsize¶
Größe eines Elements eines variablen Typs in Bytes. Wird zum Setzen von
PyTypeObject.tp_itemsizeverwendet. Siehe die Dokumentation vontp_itemsizefür Hinweise.Wenn Null, wird
tp_itemsizegeerbt. Das Erweitern beliebig variabler Größenklassen ist gefährlich, da einige Typen einen festen Offset für variablen Speicher verwenden, der dann mit festem Speicher kollidieren kann, der von einer Unterklasse verwendet wird. Um Fehler zu vermeiden, ist das Erben vonitemsizenur in den folgenden Situationen möglichDie Basis ist nicht variabel groß (ihr
tp_itemsize).Die angeforderte
PyType_Spec.basicsizeist positiv, was darauf hindeutet, dass das Speicherlayout der Basisklasse bekannt ist.Die angeforderte
PyType_Spec.basicsizeist Null, was darauf hindeutet, dass die Unterklasse nicht direkt auf den Speicher der Instanz zugreift.Mit dem Flag
Py_TPFLAGS_ITEMS_AT_END.
-
unsigned int flags¶
Typ-Flags, die zum Setzen von
PyTypeObject.tp_flagsverwendet werden.Wenn das Flag
Py_TPFLAGS_HEAPTYPEnicht gesetzt ist, setztPyType_FromSpecWithBases()es automatisch.
-
PyType_Slot *slots¶
Array von
PyType_SlotStrukturen. Beendet durch den speziellen Slotwert{0, NULL}.Jede Slot-ID darf höchstens einmal angegeben werden.
-
const char *name¶
-
type PyType_Slot¶
- Teil der Stable ABI (einschließlich aller Member).
Struktur, die optionale Funktionalitäten eines Typs definiert und eine Slot-ID und einen Wertzeiger enthält.
-
int slot¶
Eine Slot-ID.
Slot-IDs sind benannt wie die Feldnamen der Strukturen
PyTypeObject,PyNumberMethods,PySequenceMethods,PyMappingMethodsundPyAsyncMethodsmit einem hinzugefügten PräfixPy_. Zum Beispiel: verwenden SiePy_tp_dealloc, umPyTypeObject.tp_dealloczu setzenPy_nb_add, umPyNumberMethods.nb_addzu setzenPy_sq_length, umPySequenceMethods.sq_lengthzu setzen
Ein zusätzlicher Slot wird unterstützt, der kein Feld der Struktur
PyTypeObjectistDie folgenden "Offset"-Felder können nicht über
PyType_Slotgesetzt werdentp_weaklistoffset(verwenden Sie stattdessenPy_TPFLAGS_MANAGED_WEAKREF, wenn möglich)tp_dictoffset(verwenden Sie stattdessenPy_TPFLAGS_MANAGED_DICT, wenn möglich)tp_vectorcall_offset(verwenden Sie"__vectorcalloffset__"in PyMemberDef)
Wenn es nicht möglich ist, auf ein
MANAGED-Flag umzuschalten (z. B. für Vectorcall oder zur Unterstützung von Python älter als 3.12), geben Sie den Offset inPy_tp_membersan. Siehe die Dokumentation zu PyMemberDef für Details.Die folgenden internen Felder können bei der Erstellung eines Heap-Typs überhaupt nicht gesetzt werden
tp_dict,tp_mro,tp_cache,tp_subclassesundtp_weaklist.
Das Setzen von
Py_tp_basesoderPy_tp_basekann auf einigen Plattformen problematisch sein. Um Probleme zu vermeiden, verwenden Sie stattdessen das Argument bases vonPyType_FromSpecWithBases().Geändert in Version 3.9: Slots in
PyBufferProcskönnen in der unbegrenzten API gesetzt werden.Geändert in Version 3.11:
bf_getbufferundbf_releasebuffersind jetzt unter der begrenzten API verfügbar.Geändert in Version 3.14: Das Feld
tp_vectorcallkann jetzt mitPy_tp_vectorcallgesetzt werden. Siehe die Dokumentation des Feldes für Details.
-
void *pfunc¶
Der gewünschte Wert des Slots. In den meisten Fällen ist dies ein Zeiger auf eine Funktion.
pfunc-Werte dürfen nicht
NULLsein, außer für die folgenden SlotsPy_tp_docPy_tp_token(der Klarheit halber, bevorzugen SiePy_TP_USE_SPECgegenüberNULL)
-
int slot¶
-
Py_tp_token¶
Ein
slot, der eine ID für ein statisches Speicherlayout einer Klasse aufzeichnet.Wenn die
PyType_Specder Klasse statisch zugewiesen ist, kann das Token mit dem speziellen WertPy_TP_USE_SPECauf die Spec gesetzt werden.static PyType_Slot foo_slots[] = { {Py_tp_token, Py_TP_USE_SPEC},
Es kann auch auf einen beliebigen Zeiger gesetzt werden, aber Sie müssen sicherstellen, dass
Der Zeiger überlebt die Klasse, sodass er nicht wieder für etwas anderes verwendet wird, während die Klasse existiert.
Er "gehört" zum Erweiterungsmodul, in dem die Klasse lebt, sodass er nicht mit anderen Erweiterungen kollidiert.
Verwenden Sie
PyType_GetBaseByToken(), um zu überprüfen, ob die Superklasse einer Klasse ein bestimmtes Token hat - das heißt, um zu überprüfen, ob das Speicherlayout kompatibel ist.Um das Token für eine gegebene Klasse zu erhalten (ohne Berücksichtigung von Superklassen), verwenden Sie
PyType_GetSlot()mitPy_tp_token.Hinzugefügt in Version 3.14.
-
Py_TP_USE_SPEC¶
Wird als Wert mit
Py_tp_tokenverwendet, um das Token auf diePyType_Specder Klasse zu setzen. Erweitert sich zuNULL.Hinzugefügt in Version 3.14.