Objektprotokoll¶
-
PyObject *Py_GetConstant(unsigned int constant_id)¶
- Teil des Stable ABI seit Version 3.13.
Ruft eine starke Referenz auf eine Konstante ab.
Setzt eine Ausnahme und gibt
NULLzurück, wenn constant_id ungültig ist.constant_id muss einer der folgenden Konstantenbezeichner sein
Konstantenbezeichner
Wert
Zurückgegebenes Objekt
-
Py_CONSTANT_NONE¶
0-
Py_CONSTANT_FALSE¶
1-
Py_CONSTANT_TRUE¶
2-
Py_CONSTANT_ELLIPSIS¶
3-
Py_CONSTANT_NOT_IMPLEMENTED¶
4-
Py_CONSTANT_ZERO¶
50-
Py_CONSTANT_ONE¶
61-
Py_CONSTANT_EMPTY_STR¶
7''-
Py_CONSTANT_EMPTY_BYTES¶
8b''-
Py_CONSTANT_EMPTY_TUPLE¶
9()Numerische Werte werden nur für Projekte angegeben, die die Konstantenbezeichner nicht verwenden können.
Hinzugefügt in Version 3.13.
CPython Implementierungsdetail: In CPython sind alle diese Konstanten unsterblich.
-
Py_CONSTANT_NONE¶
-
PyObject *Py_GetConstantBorrowed(unsigned int constant_id)¶
- Teil des Stable ABI seit Version 3.13.
Ähnlich wie
Py_GetConstant(), gibt aber eine geborgte Referenz zurück.Diese Funktion ist hauptsächlich für die Abwärtskompatibilität gedacht: die Verwendung von
Py_GetConstant()wird für neuen Code empfohlen.Die Referenz wird vom Interpreter ausgeliehen und ist bis zur Finalisierung des Interpreters gültig.
Hinzugefügt in Version 3.13.
-
PyObject *Py_NotImplemented¶
Das
NotImplementedSingleton, das verwendet wird, um anzuzeigen, dass eine Operation für die gegebene Typkombination nicht implementiert ist.
-
Py_RETURN_NOTIMPLEMENTED¶
Behandelt korrekt die Rückgabe von
Py_NotImplementedaus einer C-Funktion heraus (d.h. erstellt eine neue starke Referenz aufNotImplementedund gibt diese zurück).
-
Py_PRINT_RAW¶
Flag, das mit mehreren Funktionen verwendet werden kann, die das Objekt ausgeben (wie z.B.
PyObject_Print()undPyFile_WriteObject()). Wenn es übergeben wird, verwenden diese Funktionen diestr()des Objekts anstelle derrepr().
-
int PyObject_Print(PyObject *o, FILE *fp, int flags)¶
Gibt ein Objekt o auf der Datei fp aus. Gibt
-1bei einem Fehler zurück. Das Argument flags wird verwendet, um bestimmte Ausgabeoptionen zu aktivieren. Die einzige derzeit unterstützte Option istPy_PRINT_RAW; wenn diese angegeben wird, wird diestr()des Objekts anstelle derrepr()ausgegeben.
-
int PyObject_HasAttrWithError(PyObject *o, PyObject *attr_name)¶
- Teil des Stable ABI seit Version 3.13.
Gibt
1zurück, wenn o das Attribut attr_name hat, und0andernfalls. Dies entspricht dem Python-Ausdruckhasattr(o, attr_name). Bei einem Fehler wird-1zurückgegeben.Hinzugefügt in Version 3.13.
-
int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name)¶
- Teil des Stable ABI seit Version 3.13.
Dies ist dasselbe wie
PyObject_HasAttrWithError(), aber attr_name wird als UTF-8-kodierter Byte-String vom Typ const char* angegeben, anstatt als PyObject*.Hinzugefügt in Version 3.13.
-
int PyObject_HasAttr(PyObject *o, PyObject *attr_name)¶
- Teil der Stable ABI.
Gibt
1zurück, wenn o das Attribut attr_name hat, und0andernfalls. Diese Funktion ist immer erfolgreich.Hinweis
Ausnahmen, die auftreten, wenn diese Funktion die Methoden
__getattr__()und__getattribute__()aufruft, werden nicht weitergegeben, sondern ansys.unraisablehook()übergeben. Für eine ordnungsgemäße Fehlerbehandlung verwenden Sie stattdessenPyObject_HasAttrWithError(),PyObject_GetOptionalAttr()oderPyObject_GetAttr().
-
int PyObject_HasAttrString(PyObject *o, const char *attr_name)¶
- Teil der Stable ABI.
Dies ist dasselbe wie
PyObject_HasAttr(), aber attr_name wird als UTF-8-kodierter Byte-String vom Typ const char* angegeben, anstatt als PyObject*.Hinweis
Ausnahmen, die auftreten, wenn diese Funktion die Methoden
__getattr__()und__getattribute__()aufruft oder während der Erstellung des temporärenstr-Objekts, werden stillschweigend ignoriert. Für eine ordnungsgemäße Fehlerbehandlung verwenden Sie stattdessenPyObject_HasAttrStringWithError(),PyObject_GetOptionalAttrString()oderPyObject_GetAttrString().
-
PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Ruft ein Attribut mit dem Namen attr_name vom Objekt o ab. Gibt den Attributwert bei Erfolg oder
NULLbei einem Fehler zurück. Dies ist das Äquivalent des Python-Ausdruckso.attr_name.Wenn das fehlende Attribut nicht als Fehler behandelt werden soll, können Sie stattdessen
PyObject_GetOptionalAttr()verwenden.
-
PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dies ist dasselbe wie
PyObject_GetAttr(), aber attr_name wird als UTF-8-kodierter Byte-String vom Typ const char* angegeben, anstatt als PyObject*.Wenn das fehlende Attribut nicht als Fehler behandelt werden soll, können Sie stattdessen
PyObject_GetOptionalAttrString()verwenden.
-
int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result);¶
- Teil des Stable ABI seit Version 3.13.
Variante von
PyObject_GetAttr(), die keineAttributeErrorauslöst, wenn das Attribut nicht gefunden wird.Wenn das Attribut gefunden wird, gibt die Funktion
1zurück und setzt *result auf eine neue starke Referenz auf das Attribut. Wenn das Attribut nicht gefunden wird, gibt die Funktion0zurück und setzt *result aufNULL; dieAttributeErrorwird unterdrückt. Wenn ein anderer Fehler als eineAttributeErrorauftritt, gibt die Funktion-1zurück und setzt *result aufNULL.Hinzugefügt in Version 3.13.
-
int PyObject_GetOptionalAttrString(PyObject *obj, const char *attr_name, PyObject **result);¶
- Teil des Stable ABI seit Version 3.13.
Dies ist dasselbe wie
PyObject_GetOptionalAttr(), aber attr_name wird als UTF-8-kodierter Byte-String vom Typ const char* angegeben, anstatt als PyObject*.Hinzugefügt in Version 3.13.
-
PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Generische Attribut-Getter-Funktion, die für den
tp_getattroSlot eines Typobjekts vorgesehen ist. Sie sucht nach einem Deskriptor im Wörterbuch der Klassen in der MRO des Objekts sowie nach einem Attribut im__dict__des Objekts (falls vorhanden). Wie in Deskriptoren implementieren beschrieben, haben Daten-Deskriptoren Vorrang vor Instanzattributen, während Nicht-Daten-Deskriptoren dies nicht tun. Andernfalls wird eineAttributeErrorausgelöst.
-
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)¶
- Teil der Stable ABI.
Setzt den Wert des Attributs mit dem Namen attr_name für das Objekt o auf den Wert v. Löst im Fehlerfall eine Ausnahme aus und gibt
-1zurück; gibt0bei Erfolg zurück. Dies ist das Äquivalent des Python-Statementso.attr_name = v.Wenn v
NULList, wird das Attribut gelöscht. Dieses Verhalten ist veraltet zugunsten der Verwendung vonPyObject_DelAttr(), aber es gibt derzeit keine Pläne, es zu entfernen.
-
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶
- Teil der Stable ABI.
Dies ist dasselbe wie
PyObject_SetAttr(), aber attr_name wird als UTF-8-kodierter Byte-String vom Typ const char* angegeben, anstatt als PyObject*.Wenn v
NULList, wird das Attribut gelöscht, aber diese Funktion ist veraltet zugunsten der Verwendung vonPyObject_DelAttrString().Die Anzahl der verschiedenen Attributnamen, die dieser Funktion übergeben werden, sollte gering gehalten werden, normalerweise durch Verwendung eines statisch zugewiesenen Strings als attr_name. Für zur Kompilierungszeit nicht bekannte Attributnamen ist es vorzuziehen,
PyUnicode_FromString()undPyObject_SetAttr()direkt aufzurufen. Weitere Details finden Sie unterPyUnicode_InternFromString(), das intern zum Erstellen eines Schlüsselobjekts verwendet werden kann.
-
int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)¶
- Teil der Stable ABI.
Generische Attribut-Setter- und Deleter-Funktion, die für den
tp_setattroSlot eines Typobjekts vorgesehen ist. Sie sucht nach einem Daten-Deskriptor im Wörterbuch der Klassen in der MRO des Objekts und bevorzugt diesen, wenn er gefunden wird, gegenüber dem Setzen oder Löschen des Attributs im Instanzwörterbuch. Andernfalls wird das Attribut im__dict__des Objekts gesetzt oder gelöscht (falls vorhanden). Bei Erfolg wird0zurückgegeben, andernfalls wird eineAttributeErrorausgelöst und-1zurückgegeben.
-
int PyObject_DelAttr(PyObject *o, PyObject *attr_name)¶
- Teil des Stable ABI seit Version 3.13.
Löscht das Attribut mit dem Namen attr_name für das Objekt o. Gibt
-1bei einem Fehler zurück. Dies ist das Äquivalent des Python-Statementsdel o.attr_name.
-
int PyObject_DelAttrString(PyObject *o, const char *attr_name)¶
- Teil des Stable ABI seit Version 3.13.
Dies ist dasselbe wie
PyObject_DelAttr(), aber attr_name wird als UTF-8-kodierter Byte-String const char* angegeben, anstatt als PyObject*.Die Anzahl der an diese Funktion übergebenen unterschiedlichen Attributnamen sollte klein gehalten werden, normalerweise durch Verwendung eines statisch zugewiesenen Strings als attr_name. Für Attributnamen, die zur Kompilierzeit nicht bekannt sind, ist es vorzuziehen,
PyUnicode_FromString()undPyObject_DelAttr()direkt aufzurufen. Weitere Details finden Sie unterPyUnicode_InternFromString(), das intern verwendet werden kann, um ein Schlüsselobjekt für die Suche zu erstellen.
-
PyObject *PyObject_GenericGetDict(PyObject *o, void *context)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.10.
Eine generische Implementierung für den Getter eines
__dict__-Deskriptors. Es erstellt das Dictionary bei Bedarf.Diese Funktion kann auch aufgerufen werden, um das
__dict__des Objekts o abzurufen. Übergeben SieNULLfür context, wenn Sie sie aufrufen. Da diese Funktion möglicherweise Speicher für das Dictionary zuweisen muss, kann es effizienter sein,PyObject_GetAttr()aufzurufen, wenn auf ein Attribut des Objekts zugegriffen wird.Bei einem Fehler wird
NULLmit einer gesetzten Ausnahme zurückgegeben.Hinzugefügt in Version 3.3.
-
int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)¶
- Teil der Stable ABI seit Version 3.7.
Eine generische Implementierung für den Setter eines
__dict__-Deskriptors. Diese Implementierung erlaubt nicht, das Dictionary zu löschen.Hinzugefügt in Version 3.3.
-
PyObject **_PyObject_GetDictPtr(PyObject *obj)¶
Gibt einen Zeiger auf
__dict__des Objekts obj zurück. Wenn kein__dict__vorhanden ist, wirdNULLzurückgegeben, ohne eine Ausnahme zu setzen.Diese Funktion muss möglicherweise Speicher für das Dictionary zuweisen, daher kann es effizienter sein,
PyObject_GetAttr()aufzurufen, wenn auf ein Attribut des Objekts zugegriffen wird.
-
PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Vergleicht die Werte von o1 und o2 unter Verwendung der durch opid angegebenen Operation, die eine der folgenden sein muss:
Py_LT,Py_LE,Py_EQ,Py_NE,Py_GToderPy_GE, entsprechend<,<=,==,!=,>oder>=. Dies entspricht dem Python-Ausdrucko1 op o2, wobeiopder Operator ist, der opid entspricht. Gibt bei Erfolg den Wert des Vergleichs zurück, bei FehlerNULL.
-
int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)¶
- Teil der Stable ABI.
Vergleicht die Werte von o1 und o2 unter Verwendung der durch opid angegebenen Operation, wie
PyObject_RichCompare(), gibt jedoch bei Fehlern-1, bei einem falschen Ergebnis0und ansonsten1zurück.
Hinweis
Wenn o1 und o2 dasselbe Objekt sind, gibt PyObject_RichCompareBool() für Py_EQ immer 1 und für Py_NE immer 0 zurück.
-
PyObject *PyObject_Format(PyObject *obj, PyObject *format_spec)¶
- Teil der Stable ABI.
Formatiert obj unter Verwendung von format_spec. Dies entspricht dem Python-Ausdruck
format(obj, format_spec).format_spec kann
NULLsein. In diesem Fall entspricht der Aufrufformat(obj). Gibt bei Erfolg den formatierten String zurück, bei FehlerNULL.
-
PyObject *PyObject_Repr(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Berechnet eine String-Darstellung des Objekts o. Gibt bei Erfolg die String-Darstellung zurück, bei Fehler
NULL. Dies entspricht dem Python-Ausdruckrepr(o). Wird von der integrierten Funktionrepr()aufgerufen.Geändert in Version 3.4: Diese Funktion enthält jetzt eine Debug-Assertion, um sicherzustellen, dass sie keine aktive Ausnahme stillschweigend verwirft.
-
PyObject *PyObject_ASCII(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Wie
PyObject_Repr()berechnet es eine String-Darstellung des Objekts o, maskiert jedoch die Nicht-ASCII-Zeichen im vonPyObject_Repr()zurückgegebenen String mit\x-,\u- oder\U-Escapes. Dies erzeugt einen String, der dem vonPyObject_Repr()in Python 2 zurückgegebenen ähnelt. Wird von der integrierten Funktionascii()aufgerufen.
-
PyObject *PyObject_Str(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Berechnet eine String-Darstellung des Objekts o. Gibt bei Erfolg die String-Darstellung zurück, bei Fehler
NULL. Dies entspricht dem Python-Ausdruckstr(o). Wird von der integrierten Funktionstr()und damit auch von der Funktionprint()aufgerufen.Geändert in Version 3.4: Diese Funktion enthält jetzt eine Debug-Assertion, um sicherzustellen, dass sie keine aktive Ausnahme stillschweigend verwirft.
-
PyObject *PyObject_Bytes(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Berechnet eine Byte-Darstellung des Objekts o.
NULLwird bei Fehlern zurückgegeben und ein Bytes-Objekt bei Erfolg. Dies entspricht dem Python-Ausdruckbytes(o), wenn o keine Ganzzahl ist. Im Gegensatz zubytes(o)wird bei einer Ganzzahl o einTypeErrorausgelöst, anstatt eines mit Nullen initialisierten Bytes-Objekts.
-
int PyObject_IsSubclass(PyObject *derived, PyObject *cls)¶
- Teil der Stable ABI.
Gibt
1zurück, wenn die Klasse derived identisch mit der Klasse cls ist oder von ihr abgeleitet ist, andernfalls gibt sie0zurück. Im Fehlerfall wird-1zurückgegeben.Wenn cls ein Tupel ist, wird die Prüfung gegen jeden Eintrag in cls durchgeführt. Das Ergebnis ist
1, wenn mindestens eine der Prüfungen1zurückgibt, andernfalls0.Wenn cls eine Methode
__subclasscheck__()hat, wird diese aufgerufen, um den Unterklassenstatus zu bestimmen, wie in PEP 3119 beschrieben. Andernfalls ist derived eine Unterklasse von cls, wenn sie eine direkte oder indirekte Unterklasse ist, d.h. incls.__mro__enthalten ist.Normalerweise werden nur Klassenobjekte, d.h. Instanzen von
typeoder einer abgeleiteten Klasse, als Klassen betrachtet. Objekte können dies jedoch überschreiben, indem sie ein Attribut__bases__haben (das ein Tupel von Basisklassen sein muss).
-
int PyObject_IsInstance(PyObject *inst, PyObject *cls)¶
- Teil der Stable ABI.
Gibt
1zurück, wenn inst eine Instanz der Klasse cls oder eine Unterklasse von cls ist, und0, wenn nicht. Bei einem Fehler wird-1zurückgegeben und eine Ausnahme gesetzt.Wenn cls ein Tupel ist, wird die Prüfung gegen jeden Eintrag in cls durchgeführt. Das Ergebnis ist
1, wenn mindestens eine der Prüfungen1zurückgibt, andernfalls0.Wenn cls eine Methode
__instancecheck__()hat, wird diese aufgerufen, um den Unterklassenstatus zu bestimmen, wie in PEP 3119 beschrieben. Andernfalls ist inst eine Instanz von cls, wenn ihre Klasse eine Unterklasse von cls ist.Eine Instanz inst kann überschreiben, was als ihre Klasse gilt, indem sie ein Attribut
__class__hat.Ein Objekt cls kann überschreiben, ob es als Klasse gilt und was seine Basisklassen sind, indem es ein Attribut
__bases__hat (das ein Tupel von Basisklassen sein muss).
-
Py_hash_t PyObject_Hash(PyObject *o)¶
- Teil der Stable ABI.
Berechnet und gibt den Hashwert eines Objekts o zurück. Bei Fehler wird
-1zurückgegeben. Dies entspricht dem Python-Ausdruckhash(o).Geändert in Version 3.2: Der Rückgabetyp ist jetzt Py_hash_t. Dies ist eine vorzeichenbehaftete Ganzzahl gleicher Größe wie
Py_ssize_t.
-
Py_hash_t PyObject_HashNotImplemented(PyObject *o)¶
- Teil der Stable ABI.
Setzt einen
TypeError, der angibt, dasstype(o)nicht hashbar ist und gibt-1zurück. Diese Funktion erhält eine besondere Behandlung, wenn sie in einemtp_hash-Slot gespeichert wird, wodurch ein Typ dem Interpreter explizit anzeigen kann, dass er nicht hashbar ist.
-
int PyObject_IsTrue(PyObject *o)¶
- Teil der Stable ABI.
Gibt
1zurück, wenn das Objekt o als wahr gilt, und0andernfalls. Dies entspricht dem Python-Ausdrucknot not o. Bei einem Fehler wird-1zurückgegeben.
-
int PyObject_Not(PyObject *o)¶
- Teil der Stable ABI.
Gibt
0zurück, wenn das Objekt o als wahr gilt, und1andernfalls. Dies entspricht dem Python-Ausdrucknot o. Bei einem Fehler wird-1zurückgegeben.
-
PyObject *PyObject_Type(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Wenn o nicht
NULList, gibt diese Funktion ein Typobjekt zurück, das dem Objekttyp von Objekt o entspricht. Bei einem Fehler wirdSystemErrorausgelöst undNULLzurückgegeben. Dies entspricht dem Python-Ausdrucktype(o). Diese Funktion erstellt eine neue starke Referenz auf den Rückgabewert. Es gibt keinen wirklichen Grund, diese Funktion anstelle der FunktionPy_TYPE()zu verwenden, die einen Zeiger vom Typ PyTypeObject* zurückgibt, außer wenn eine neue starke Referenz benötigt wird.
-
int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)¶
Gibt einen Wert ungleich Null zurück, wenn das Objekt o vom Typ type oder einer Unterklasse von type ist, und andernfalls
0. Beide Parameter dürfen nichtNULLsein.
-
Py_ssize_t PyObject_Size(PyObject *o)¶
-
Py_ssize_t PyObject_Length(PyObject *o)¶
- Teil der Stable ABI.
Gibt die Länge des Objekts o zurück. Wenn das Objekt o entweder das Sequenz- oder das Mapping-Protokoll bereitstellt, wird die Sequenzlänge zurückgegeben. Bei einem Fehler wird
-1zurückgegeben. Dies entspricht dem Python-Ausdrucklen(o).
-
Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)¶
Gibt eine geschätzte Länge für das Objekt o zurück. Versucht zuerst, seine tatsächliche Länge zurückzugeben, dann eine Schätzung mithilfe von
__length_hint__()und gibt schließlich den Standardwert zurück. Bei einem Fehler wird-1zurückgegeben. Dies entspricht dem Python-Ausdruckoperator.length_hint(o, defaultvalue).Hinzugefügt in Version 3.4.
-
PyObject *PyObject_GetItem(PyObject *o, PyObject *key)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt das Element von o zurück, das dem Objekt key entspricht, oder
NULLbei Fehler. Dies entspricht dem Python-Ausdrucko[key].
-
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)¶
- Teil der Stable ABI.
Ordnet das Objekt key dem Wert v zu. Löst bei einem Fehler eine Ausnahme aus und gibt
-1zurück; gibt bei Erfolg0zurück. Dies entspricht der Python-Anweisungo[key] = v. Diese Funktion stiehlt keine Referenz an v.
-
int PyObject_DelItem(PyObject *o, PyObject *key)¶
- Teil der Stable ABI.
Entfernt die Zuordnung für das Objekt key aus dem Objekt o. Gibt bei Fehler
-1zurück. Dies entspricht der Python-Anweisungdel o[key].
-
int PyObject_DelItemString(PyObject *o, const char *key)¶
- Teil der Stable ABI.
Dies ist dasselbe wie
PyObject_DelItem(), aber key ist als ein UTF-8-kodierter Bytes-String vom Typ const char* angegeben, anstatt als ein PyObject*.
-
PyObject *PyObject_Dir(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dies ist äquivalent zum Python-Ausdruck
dir(o)und gibt eine (möglicherweise leere) Liste von Strings zurück, die für das Objekt-Argument geeignet sind, oderNULL, wenn ein Fehler aufgetreten ist. Wenn das ArgumentNULList, verhält es sich wie das Pythondir()und gibt die Namen der aktuellen lokalen Variablen zurück. In diesem Fall wirdNULLzurückgegeben, wenn kein Ausführungs-Frame aktiv ist, aberPyErr_Occurred()gibt falsch zurück.
-
PyObject *PyObject_GetIter(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dies ist äquivalent zum Python-Ausdruck
iter(o). Es gibt einen neuen Iterator für das Objekt-Argument zurück, oder das Objekt selbst, wenn das Objekt bereits ein Iterator ist. LöstTypeErroraus und gibtNULLzurück, wenn das Objekt nicht iterierbar ist.
-
PyObject *PyObject_SelfIter(PyObject *obj)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dies ist äquivalent zur Python-Methode
__iter__(self): return self. Es ist für Iterator-Typen gedacht und wird imPyTypeObject.tp_iter-Slot verwendet.
-
PyObject *PyObject_GetAIter(PyObject *o)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.10.
Dies ist das Äquivalent zum Python-Ausdruck
aiter(o). Nimmt einAsyncIterable-Objekt und gibt einenAsyncIteratordafür zurück. Dies ist typischerweise ein neuer Iterator, aber wenn das Argument einAsyncIteratorist, gibt es sich selbst zurück. LöstTypeErroraus und gibtNULLzurück, wenn das Objekt nicht iterierbar ist.Hinzugefügt in Version 3.10.
-
void *PyObject_GetTypeData(PyObject *o, PyTypeObject *cls)¶
- Teil der Stable ABI seit Version 3.12.
Ruft einen Zeiger auf klassenspezifische Daten ab, die für cls reserviert sind.
Das Objekt o muss eine Instanz von cls sein, und cls muss unter Verwendung einer negativen
PyType_Spec.basicsizeerstellt worden sein. Python prüft dies nicht.Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Hinzugefügt in Version 3.12.
-
Py_ssize_t PyType_GetTypeDataSize(PyTypeObject *cls)¶
- Teil der Stable ABI seit Version 3.12.
Gibt die Größe des für cls reservierten Instanzspeichers zurück, d.h. die Größe des Speichers, den
PyObject_GetTypeData()zurückgibt.Dies kann größer sein als mit
-PyType_Spec.basicsizeangefordert; es ist sicher, diese größere Größe zu verwenden (z. B. mitmemset()).Der Typ cls **muss** unter Verwendung einer negativen
PyType_Spec.basicsizeerstellt worden sein. Python prüft dies nicht.Bei einem Fehler wird eine Ausnahme gesetzt und ein negativer Wert zurückgegeben.
Hinzugefügt in Version 3.12.
-
void *PyObject_GetItemData(PyObject *o)¶
Ruft zeigerspezifische Daten für eine Klasse mit gesetztem
Py_TPFLAGS_ITEMS_AT_ENDab.Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.TypeErrorwird ausgelöst, wenn o kein gesetztesPy_TPFLAGS_ITEMS_AT_ENDhat.Hinzugefügt in Version 3.12.
-
int PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg)¶
Besucht das verwaltete Dictionary von obj.
Diese Funktion darf nur in einer Traverse-Funktion des Typs aufgerufen werden, der das Flag
Py_TPFLAGS_MANAGED_DICTgesetzt hat.Hinzugefügt in Version 3.13.
-
void PyObject_ClearManagedDict(PyObject *obj)¶
Löscht das verwaltete Dictionary von obj.
Diese Funktion darf nur in einer Clear-Funktion des Typs aufgerufen werden, der das Flag
Py_TPFLAGS_MANAGED_DICTgesetzt hat.Hinzugefügt in Version 3.13.
-
int PyUnstable_Object_EnableDeferredRefcount(PyObject *obj)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Aktiviert die Deferred Reference Counting für obj, falls vom Laufzeitsystem unterstützt. Im Free-Threaded-Build ermöglicht dies dem Interpreter, Anpassungen des Referenzzählers für obj zu vermeiden, was die Leistung bei Multi-Threading verbessern kann. Der Kompromiss besteht darin, dass obj erst vom Tracing-Garbage-Collector freigegeben wird und nicht, sobald der Interpreter keine Referenzen mehr darauf hat.
Diese Funktion gibt
1zurück, wenn die Deferred Reference Counting für obj aktiviert ist, und0, wenn die Deferred Reference Counting nicht unterstützt wird oder der Hinweis vom Interpreter ignoriert wurde, z. B. wenn die Deferred Reference Counting für obj bereits aktiviert ist. Diese Funktion ist thread-sicher und kann nicht fehlschlagen.Diese Funktion tut nichts bei Builds mit aktiviertem GIL, die keine Deferred Reference Counting unterstützen. Sie tut auch nichts, wenn obj kein vom Garbage Collector verfolgtes Objekt ist (siehe
gc.is_tracked()undPyObject_GC_IsTracked()).Diese Funktion ist dazu gedacht, kurz nach der Erstellung von obj von dem Code, der es erstellt, verwendet zu werden, z. B. im
tp_new-Slot des Objekts.Hinzugefügt in Version 3.14.
-
int PyUnstable_Object_IsUniqueReferencedTemporary(PyObject *obj)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Prüft, ob obj ein eindeutiges temporäres Objekt ist. Gibt
1zurück, wenn obj als eindeutiges temporäres Objekt bekannt ist, und andernfalls0. Diese Funktion kann nicht fehlschlagen, aber die Prüfung ist konservativ und kann in einigen Fällen0zurückgeben, auch wenn obj ein eindeutiges temporäres Objekt ist.Wenn ein Objekt ein eindeutiges temporäres Objekt ist, ist garantiert, dass der aktuelle Code die einzige Referenz auf das Objekt hat. Für Argumente an C-Funktionen sollte dies anstelle der Prüfung des Referenzzählers auf
1verwendet werden. Ab Python 3.14 vermeidet der Interpreter intern einige Modifikationen des Referenzzählers beim Laden von Objekten auf den Operandenstapel, indem er Referenzen ausleiht, wann immer möglich. Das bedeutet, dass ein Referenzzähler von1allein nicht garantiert, dass ein Funktionsargument eindeutig referenziert wird.Im folgenden Beispiel wird
my_funcmit einem eindeutigen temporären Objekt als Argument aufgerufenmy_func([1, 2, 3])
Im folgenden Beispiel wird
my_func**nicht** mit einem eindeutigen temporären Objekt als Argument aufgerufen, auch wenn sein Referenzzähler1istmy_list = [1, 2, 3] my_func(my_list)
Siehe auch die Funktion
Py_REFCNT().Hinzugefügt in Version 3.14.
-
int PyUnstable_IsImmortal(PyObject *obj)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Diese Funktion gibt ungleich Null zurück, wenn obj unsterblich ist, und Null andernfalls. Diese Funktion kann nicht fehlschlagen.
Hinweis
Objekte, die in einer CPython-Version unsterblich sind, sind nicht garantiert in einer anderen Version unsterblich.
Hinzugefügt in Version 3.14.
-
int PyUnstable_TryIncRef(PyObject *obj)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Erhöht den Referenzzähler von obj, wenn dieser nicht Null ist. Gibt
1zurück, wenn der Referenzzähler des Objekts erfolgreich erhöht wurde. Andernfalls gibt diese Funktion0zurück.PyUnstable_EnableTryIncRef()muss zuvor für obj aufgerufen worden sein, sonst kann diese Funktion im Free Threading-Build fälschlicherweise0zurückgeben.Diese Funktion ist logisch äquivalent zum folgenden C-Code, außer dass sie im Free Threading-Build atomar funktioniert
if (Py_REFCNT(op) > 0) { Py_INCREF(op); return 1; } return 0;
Dies ist als Baustein für die Verwaltung von schwachen Referenzen ohne den Overhead eines Python-schwachen Referenzobjekts gedacht.
Typischerweise erfordert die korrekte Verwendung dieser Funktion Unterstützung durch den Deallocator (
tp_dealloc) von obj. Zum Beispiel könnte das folgende Gerüst angepasst werden, um eine "weakmap" zu implementieren, die sich wie einWeakValueDictionaryfür einen bestimmten Typ verhältPyMutex mutex; PyObject * add_entry(weakmap_key_type *key, PyObject *value) { PyUnstable_EnableTryIncRef(value); weakmap_type weakmap = ...; PyMutex_Lock(&mutex); weakmap_add_entry(weakmap, key, value); PyMutex_Unlock(&mutex); Py_RETURN_NONE; } PyObject * get_value(weakmap_key_type *key) { weakmap_type weakmap = ...; PyMutex_Lock(&mutex); PyObject *result = weakmap_find(weakmap, key); if (PyUnstable_TryIncRef(result)) { // `result` is safe to use PyMutex_Unlock(&mutex); return result; } // if we get here, `result` is starting to be garbage-collected, // but has not been removed from the weakmap yet PyMutex_Unlock(&mutex); return NULL; } // tp_dealloc function for weakmap values void value_dealloc(PyObject *value) { weakmap_type weakmap = ...; PyMutex_Lock(&mutex); weakmap_remove_value(weakmap, value); ... PyMutex_Unlock(&mutex); }
Hinzugefügt in Version 3.14.
-
void PyUnstable_EnableTryIncRef(PyObject *obj)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Aktiviert nachfolgende Verwendungen von
PyUnstable_TryIncRef()auf obj. Der Aufrufer muss beim Aufruf dieser Funktion eine starke Referenz auf obj halten.Hinzugefügt in Version 3.14.
-
int PyUnstable_Object_IsUniquelyReferenced(PyObject *op)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Ermittelt, ob op nur eine einzige Referenz hat.
Bei GIL-aktivierten Builds ist diese Funktion äquivalent zu Py_REFCNT(op) == 1.
Bei einem Free Threaded-Build prüft dies, ob der Referenzzähler von op gleich eins ist und prüft zusätzlich, ob op nur von diesem Thread verwendet wird. Py_REFCNT(op) == 1 ist bei Free Threaded Builds **nicht** thread-sicher; bevorzugen Sie diese Funktion.
Der Aufrufer muss einen angeschlossenen Thread-Zustand halten, obwohl diese Funktion nicht in den Python-Interpreter aufruft. Diese Funktion kann nicht fehlschlagen.
Hinzugefügt in Version 3.14.