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 type in 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_flags von type zurück. Diese Funktion ist hauptsächlich für die Verwendung mit Py_LIMITED_API vorgesehen; die einzelnen Flag-Bits sind über Python-Versionen hinweg stabil, aber der Zugriff auf tp_flags selbst ist nicht Teil der begrenzten API.

Hinzugefügt in Version 3.2.

Geändert in Version 3.4: Der Rückgabewert ist jetzt unsigned long anstelle von long.

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 auf tp_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_dict direkt 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 -1 zurü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_ClearWatcher mit einer watcher_id aufrufen, die ihr nicht durch einen vorherigen Aufruf von PyType_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 immer PyType_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_Watch mit einer watcher_id aufrufen, die ihr nicht durch einen vorherigen Aufruf von PyType_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 Sie PyObject_IsSubclass() auf, um dieselbe Prüfung durchzuführen, die issubclass() 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_alloc eines 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 ob PyObject_Init() oder PyObject_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_alloc des Typs auf.

Für Typen, die die Speicherbereinigung unterstützen (d. h. das Flag Py_TPFLAGS_HAVE_GC ist gesetzt), verhält sich diese Funktion wie PyObject_GC_New oder PyObject_GC_NewVar (außer der Speicher wird garantiert vor der Initialisierung genullt) und sollte in tp_free mit PyObject_GC_Del() gepaart werden. Andernfalls verhält sie sich wie PyObject_New oder PyObject_NewVar (außer der Speicher wird garantiert vor der Initialisierung genullt) und sollte in tp_free mit PyObject_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_new eines Typobjekts. Erstellt eine neue Instanz unter Verwendung des Slots tp_alloc des 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_GC in seinen Flags enthält, wird das GC-Protokoll automatisch von seinen Eltern übernommen. Umgekehrt, wenn der zu erstellende Typ Py_TPFLAGS_HAVE_GC in seinen Flags enthält, **muss** er das GC-Protokoll selbst implementieren, indem er zumindest den Handler tp_traverse implementiert.

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__}" oder type.__qualname__, wenn type.__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 NULL ist, deutet dies darauf hin, dass entweder der Slot NULL ist oder dass die Funktion mit ungültigen Parametern aufgerufen wurde. Aufrufer werden den Ergebniszeiger typischerweise in den entsprechenden Funktionstyp umwandeln.

Siehe PyType_Slot.slot fü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 TypeError gesetzt und NULL zurü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. Siehe PyCMethod, um die Klasse zu erhalten, die die Methode definiert. Siehe PyType_GetModuleByDef() für Fälle, in denen PyCMethod nicht 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 von PyType_GetModule().

Wenn kein Modul mit dem gegebenen Typ verknüpft ist, wird TypeError gesetzt und NULL zurückgegeben.

Wenn der type ein zugehöriges Modul hat, dessen Zustand aber NULL ist, wird NULL zurü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 PyModuleDef def erstellt wurde, und gibt dieses Modul zurück.

Wenn kein Modul gefunden wird, wird eine TypeError ausgelöst und NULL zurückgegeben.

Diese Funktion ist für die Verwendung zusammen mit PyModule_GetState() bestimmt, um Modulzustände von Slot-Methoden (wie tp_init oder nb_add) und anderen Stellen zu erhalten, wo die definierende Klasse einer Methode nicht über die PyCMethod-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 NULL gesetzt und 0 zurückgegeben.

  • Bei einem Fehler wird *result auf NULL gesetzt und -1 mit einer gesetzten Ausnahme zurückgegeben.

Das Argument result kann NULL sein, in diesem Fall wird *result nicht gesetzt. Verwenden Sie dies, wenn Sie nur den Rückgabewert benötigen.

Das Argument token darf nicht NULL sein.

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 NULL ist, wird die Metaklasse von bases abgeleitet (oder von den Py_tp_base[s] Slots, wenn bases NULL ist, siehe unten).

Metaklassen, die tp_new überschreiben, werden nicht unterstützt, es sei denn, tp_new ist NULL.

Das Argument bases kann verwendet werden, um Basisklassen anzugeben; es kann entweder nur eine Klasse oder ein Tupel von Klassen sein. Wenn bases NULL ist, wird stattdessen der Slot Py_tp_bases verwendet. Wenn dieser ebenfalls NULL ist, wird stattdessen der Slot Py_tp_base verwendet. Wenn auch dieser NULL ist, erbt der neue Typ von object.

Das Argument module kann verwendet werden, um das Modul aufzuzeichnen, in dem die neue Klasse definiert ist. Es muss ein Modulobjekt oder NULL sein. Wenn nicht NULL, wird das Modul mit dem neuen Typ verknüpft und kann später mit PyType_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 der class-Anweisung übereinstimmt. Bei benutzerdefinierten Basistypen oder Metaklassen ist es vorzuziehen, type (oder die Metaklasse) aufzurufen, anstatt PyType_From*-Funktionen zu verwenden. Insbesondere

  • __new__() wird für die neue Klasse nicht aufgerufen (und muss auf type.__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 NULL als Slot tp_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_new der Metaklasse wird *ignoriert*, was zu einer unvollständigen Initialisierung führen kann. Das Erstellen von Klassen, deren Metaklasse tp_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_new der Metaklasse wird *ignoriert*, was zu einer unvollständigen Initialisierung führen kann. Das Erstellen von Klassen, deren Metaklasse tp_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_new der Metaklasse wird *ignoriert*, was zu einer unvollständigen Initialisierung führen kann. Das Erstellen von Klassen, deren Metaklasse tp_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 0 zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt und -1 zurü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_name verwendet wird.

int basicsize

Wenn positiv, gibt die Größe der Instanz in Bytes an. Sie wird zum Setzen von PyTypeObject.tp_basicsize verwendet.

Wenn Null, gibt an, dass tp_basicsize geerbt 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 negative basicsize fügt Python bei Bedarf Padding ein, um die Ausrichtungsvoraussetzungen von tp_basicsize zu 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_itemsize verwendet. Siehe die Dokumentation von tp_itemsize für Hinweise.

Wenn Null, wird tp_itemsize geerbt. 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 von itemsize nur in den folgenden Situationen möglich

unsigned int flags

Typ-Flags, die zum Setzen von PyTypeObject.tp_flags verwendet werden.

Wenn das Flag Py_TPFLAGS_HEAPTYPE nicht gesetzt ist, setzt PyType_FromSpecWithBases() es automatisch.

PyType_Slot *slots

Array von PyType_Slot Strukturen. Beendet durch den speziellen Slotwert {0, NULL}.

Jede Slot-ID darf höchstens einmal angegeben werden.

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, PyMappingMethods und PyAsyncMethods mit einem hinzugefügten Präfix Py_. Zum Beispiel: verwenden Sie

Ein zusätzlicher Slot wird unterstützt, der kein Feld der Struktur PyTypeObject ist

Die folgenden "Offset"-Felder können nicht über PyType_Slot gesetzt werden

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 in Py_tp_members an. Siehe die Dokumentation zu PyMemberDef für Details.

Die folgenden internen Felder können bei der Erstellung eines Heap-Typs überhaupt nicht gesetzt werden

Das Setzen von Py_tp_bases oder Py_tp_base kann auf einigen Plattformen problematisch sein. Um Probleme zu vermeiden, verwenden Sie stattdessen das Argument bases von PyType_FromSpecWithBases().

Geändert in Version 3.9: Slots in PyBufferProcs können in der unbegrenzten API gesetzt werden.

Geändert in Version 3.11: bf_getbuffer und bf_releasebuffer sind jetzt unter der begrenzten API verfügbar.

Geändert in Version 3.14: Das Feld tp_vectorcall kann jetzt mit Py_tp_vectorcall gesetzt 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 NULL sein, außer für die folgenden Slots

Py_tp_token

Ein slot, der eine ID für ein statisches Speicherlayout einer Klasse aufzeichnet.

Wenn die PyType_Spec der Klasse statisch zugewiesen ist, kann das Token mit dem speziellen Wert Py_TP_USE_SPEC auf 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() mit Py_tp_token.

Hinzugefügt in Version 3.14.

Py_TP_USE_SPEC

Wird als Wert mit Py_tp_token verwendet, um das Token auf die PyType_Spec der Klasse zu setzen. Erweitert sich zu NULL.

Hinzugefügt in Version 3.14.