Objektprotokoll¶
-
PyObject *Py_GetConstant(unsigned int constant_id)¶
- En del av Stabil ABI sedan version 3.13.
Få en strong reference till en konstant.
Ställ in ett undantag och returnera
NULL
om constant_id är ogiltig.constant_id måste vara en av dessa konstantidentifierare:
Konstant identifierare
Värde
Återlämnat 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¶
5
0
-
Py_CONSTANT_ONE¶
6
1
-
Py_CONSTANT_EMPTY_STR¶
7
''
-
Py_CONSTANT_EMPTY_BYTES¶
8
b''
-
Py_CONSTANT_EMPTY_TUPLE¶
9
()
Numeriska värden anges endast för projekt som inte kan använda de konstanta identifierarna.
Tillagd i version 3.13.
I CPython är alla dessa konstanter immortal.
-
Py_CONSTANT_NONE¶
-
PyObject *Py_GetConstantBorrowed(unsigned int constant_id)¶
- En del av Stabil ABI sedan version 3.13.
Liknar
Py_GetConstant()
, men returnerar en lånad referens.Denna funktion är främst avsedd för bakåtkompatibilitet: att använda
Py_GetConstant()
rekommenderas för ny kod.Referensen lånas av tolken och gäller till dess att tolken har slutfört sitt uppdrag.
Tillagd i version 3.13.
-
PyObject *Py_NotImplemented¶
Singleton
NotImplemented
, används för att signalera att en operation inte är implementerad för den givna typkombinationen.
-
Py_RETURN_NOTIMPLEMENTED¶
Hantera korrekt returnering av
Py_NotImplemented
från en C-funktion (dvs. skapa en ny strong reference tillNotImplemented
och returnera den).
-
Py_PRINT_RAW¶
Flagga som ska användas med flera funktioner som skriver ut objektet (som
PyObject_Print()
ochPyFile_WriteObject()
). Om den godkänns kommer dessa funktioner att använda objektetsstr()
istället förrepr()
.
-
int PyObject_Print(PyObject *o, FILE *fp, int flags)¶
Skriv ut ett objekt o, på filen fp. Returnerar
-1
vid fel. Argumentet flags används för att aktivera vissa utskriftsalternativ. Det enda alternativ som för närvarande stöds ärPy_PRINT_RAW
; om det anges skrivs objektetsstr()
ut istället förrepr()
.
-
int PyObject_HasAttrWithError(PyObject *o, PyObject *attr_name)¶
- En del av Stabil ABI sedan version 3.13.
Returnerar
1
om o har attributet attr_name, och0
annars. Detta är likvärdigt med Python-uttryckethasattr(o, attr_name)
. Vid misslyckande returneras-1
.Tillagd i version 3.13.
-
int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name)¶
- En del av Stabil ABI sedan version 3.13.
Detta är samma sak som
PyObject_HasAttrWithError()
, men attr_name anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.Tillagd i version 3.13.
-
int PyObject_HasAttr(PyObject *o, PyObject *attr_name)¶
- En del av Stabil ABI.
Returnerar
1
om o har attributet attr_name, och0
annars. Denna funktion lyckas alltid.Anteckning
Undantag som uppstår när detta anropar metoderna
__getattr__()
och__getattribute__()
sprids inte, utan ges istället tillsys.unraisablehook()
. För korrekt felhantering, användPyObject_HasAttrWithError()
,PyObject_GetOptionalAttr()
ellerPyObject_GetAttr()
istället.
-
int PyObject_HasAttrString(PyObject *o, const char *attr_name)¶
- En del av Stabil ABI.
Detta är samma sak som
PyObject_HasAttr()
, men attr_name anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.Anteckning
Undantag som uppstår när detta anropar metoderna
__getattr__()
och__getattribute__()
eller när det tillfälligastr
-objektet skapas ignoreras i tysthet. För korrekt felhantering, användPyObject_HasAttrStringWithError()
,PyObject_GetOptionalAttrString()
ellerPyObject_GetAttrString()
istället.
-
PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Hämtar ett attribut med namnet attr_name från objektet o. Returnerar attributvärdet vid framgång, eller
NULL
vid misslyckande. Detta är motsvarigheten till Python-uttrycketo.attr_name
.Om det saknade attributet inte ska behandlas som ett fel kan du använda
PyObject_GetOptionalAttr()
istället.
-
PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Detta är samma sak som
PyObject_GetAttr()
, men attr_name anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.Om det saknade attributet inte ska behandlas som ett fel kan du använda
PyObject_GetOptionalAttrString()
istället.
-
int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result);¶
- En del av Stabil ABI sedan version 3.13.
Variant av
PyObject_GetAttr()
som inte ger upphov tillAttributeError
om attributet inte hittas.Om attributet hittas returneras
1
och *result sätts till en ny strong reference till attributet. Om attributet inte hittas, returneras0
och *result sätts tillNULL
;AttributeError
tystas. Om ett annat fel änAttributeError
uppstår, returneras-1
och *result sätts tillNULL
.Tillagd i version 3.13.
-
int PyObject_GetOptionalAttrString(PyObject *obj, const char *attr_name, PyObject **result);¶
- En del av Stabil ABI sedan version 3.13.
Detta är samma sak som
PyObject_GetOptionalAttr()
, men attr_name anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.Tillagd i version 3.13.
-
PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Generisk getterfunktion för attribut som är avsedd att placeras i ett typobjekts
tp_getattro
slot. Den letar efter en deskriptor i klassordboken i objektets MRO samt ett attribut i objektets__dict__
(om det finns). Som beskrivs i Implementering av deskriptorer, har datadeskriptorer företräde framför instansattribut, medan icke-datadeskriptorer inte har det. I annat fall uppstår ettAttributeError
.
-
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)¶
- En del av Stabil ABI.
Ställ in värdet på attributet med namnet attr_name, för objektet o, till värdet v. Utlös ett undantag och returnera
-1
vid misslyckande; returnera0
vid framgång. Detta är motsvarigheten till Python-satseno.attr_name = v
.Om v är
NULL
tas attributet bort. Detta beteende är föråldrat till förmån för att användaPyObject_DelAttr()
, men det finns för närvarande inga planer på att ta bort det.
-
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶
- En del av Stabil ABI.
Detta är samma sak som
PyObject_SetAttr()
, men attr_name anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.Om v är
NULL
tas attributet bort, men denna funktion är föråldrad till förmån för att användaPyObject_DelAttrString()
.Antalet olika attributnamn som skickas till denna funktion bör hållas litet, vanligtvis genom att använda en statiskt allokerad sträng som attr_name. För attributnamn som inte är kända vid kompileringstillfället är det bättre att anropa
PyUnicode_FromString()
ochPyObject_SetAttr()
direkt. För mer information, sePyUnicode_InternFromString()
, som kan användas internt för att skapa ett nyckelobjekt.
-
int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)¶
- En del av Stabil ABI.
Generisk attributsättnings- och borttagningsfunktion som är avsedd att placeras i ett typobjekts
tp_setattro
slot. Den letar efter en databeskrivare i klassordboken i objektets MRO, och om den hittas har den företräde framför att sätta eller ta bort attributet i instansordboken. I annat fall sätts eller tas attributet bort i objektets__dict__
(om det finns). Vid framgång returneras0
, annars genereras ettAttributeError
och-1
returneras.
-
int PyObject_DelAttr(PyObject *o, PyObject *attr_name)¶
- En del av Stabil ABI sedan version 3.13.
Ta bort attributet med namnet attr_name för objektet o. Returnerar
-1
om det misslyckas. Detta är motsvarigheten till Python-satsendel o.attr_name
.
-
int PyObject_DelAttrString(PyObject *o, const char *attr_name)¶
- En del av Stabil ABI sedan version 3.13.
Detta är samma sak som
PyObject_DelAttr()
, men attr_name anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.Antalet olika attributnamn som skickas till denna funktion bör hållas litet, vanligtvis genom att använda en statiskt allokerad sträng som attr_name. För attributnamn som inte är kända vid kompileringstillfället är det bättre att anropa
PyUnicode_FromString()
ochPyObject_DelAttr()
direkt. För mer information, sePyUnicode_InternFromString()
, som kan användas internt för att skapa ett nyckelobjekt för uppslagning.
-
PyObject *PyObject_GenericGetDict(PyObject *o, void *context)¶
- Returnera värde: Ny referens. En del av Stabil ABI sedan version 3.10.
En generisk implementation för gettern för en
__dict__
deskriptor. Den skapar ordlistan om det behövs.Denna funktion kan också anropas för att få
__dict__
för objektet o. AngeNULL
för context när du anropar den. Eftersom den här funktionen kan behöva allokera minne för ordlistan kan det vara effektivare att anropaPyObject_GetAttr()
när man vill komma åt ett attribut på objektet.Vid misslyckande returneras
NULL
med en undantagsuppsättning.Tillagd i version 3.3.
-
int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)¶
- En del av Stabil ABI sedan version 3.7.
En generisk implementation för en
__dict__
descriptors setter. Den här implementationen tillåter inte att ordboken raderas.Tillagd i version 3.3.
-
PyObject **_PyObject_GetDictPtr(PyObject *obj)¶
Returnerar en pekare till
__dict__
för objektet obj. Om det inte finns någon__dict__
, returnerasNULL
utan att ett undantag anges.Denna funktion kan behöva allokera minne för ordlistan, så det kan vara mer effektivt att anropa
PyObject_GetAttr()
när man vill komma åt ett attribut på objektet.
-
PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Jämför värdena i o1 och o2 med den operation som anges av opid, som måste vara en av
Py_LT
,Py_LE
,Py_EQ
,Py_NE
,Py_GT
ellerPy_GE
, motsvarande<
,<=
,==
,!=
,>
, eller>=
respektive. Detta är motsvarigheten till Python-uttrycketo1 op o2
, därop
är operatorn som motsvarar opid. Returnerar värdet av jämförelsen om den lyckas, ellerNULL
om den misslyckas.
-
int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)¶
- En del av Stabil ABI.
Jämför värdena på o1 och o2 med den operation som anges av opid, som
PyObject_RichCompare()
, men returnerar-1
vid fel,0
om resultatet är falskt,1
annars.
Anteckning
Om o1 och o2 är samma objekt kommer PyObject_RichCompareBool()
alltid att returnera 1
för Py_EQ
och 0
för Py_NE
.
-
PyObject *PyObject_Format(PyObject *obj, PyObject *format_spec)¶
- En del av Stabil ABI.
Formatera obj med hjälp av format_spec. Detta är likvärdigt med Python-uttrycket
format(obj, format_spec)
.format_spec kan vara
NULL
. I detta fall är anropet likvärdigt medformat(obj)
. Returnerar den formaterade strängen vid framgång,NULL
vid misslyckande.
-
PyObject *PyObject_Repr(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Beräknar en strängrepresentation av objektet o. Returnerar strängrepresentationen vid framgång,
NULL
vid misslyckande. Detta är motsvarigheten till Python-uttrycketrepr(o)
. Anropas av den inbyggda funktionenrepr()
.Ändrad i version 3.4: Denna funktion innehåller nu ett debug-assertion för att säkerställa att den inte i tysthet kasserar ett aktivt undantag.
-
PyObject *PyObject_ASCII(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Som
PyObject_Repr()
, beräkna en strängrepresentation av objektet o, men escape icke-ASCII-tecken i strängen som returneras avPyObject_Repr()
med\x
,u
ellerU
escapes. Detta genererar en sträng som liknar den som returneras avPyObject_Repr()
i Python 2. Anropas av den inbyggda funktionenascii()
.
-
PyObject *PyObject_Str(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Beräknar en strängrepresentation av objektet o. Returnerar strängrepresentationen vid framgång,
NULL
vid misslyckande. Detta är motsvarigheten till Python-uttrycketstr(o)
. Anropas av den inbyggda funktionenstr()
och därför även av funktionenprint()
.Ändrad i version 3.4: Denna funktion innehåller nu ett debug-assertion för att säkerställa att den inte i tysthet kasserar ett aktivt undantag.
-
PyObject *PyObject_Bytes(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Beräkna en bytesrepresentation av objektet o.
NULL
returneras vid misslyckande och ett bytesobjekt vid framgång. Detta är likvärdigt med Python-uttrycketbytes(o)
, när o inte är ett heltal. Till skillnad frånbytes(o)
uppstår ett TypeError när o är ett heltal istället för ett nollinitialiserat bytesobjekt.
-
int PyObject_IsSubclass(PyObject *derived, PyObject *cls)¶
- En del av Stabil ABI.
Returnerar
1
om klassen derived är identisk med eller härledd från klassen cls, annars returneras0
. Vid ett fel returneras-1
.Om cls är en tupel kommer kontrollen att göras mot varje post i cls. Resultatet blir
1
när minst en av kontrollerna returnerar1
, annars blir det0
.Om cls har en
__subclasscheck__()
-metod, kommer den att anropas för att bestämma subklassstatusen enligt beskrivningen i PEP 3119. Annars är derived en underklass till cls om den är en direkt eller indirekt underklass, dvs. ingår icls.__mro__
.Normalt betraktas endast klassobjekt, dvs. instanser av
type
eller en härledd klass, som klasser. Objekt kan dock åsidosätta detta genom att ha ett__bases__
-attribut (som måste vara en tupel av basklasser).
-
int PyObject_IsInstance(PyObject *inst, PyObject *cls)¶
- En del av Stabil ABI.
Returnerar
1
om inst är en instans av klassen cls eller en underklass av cls, eller0
om inte. Vid fel returneras-1
och ett undantag anges.Om cls är en tupel kommer kontrollen att göras mot varje post i cls. Resultatet blir
1
när minst en av kontrollerna returnerar1
, annars blir det0
.Om cls har en
__instancecheck__()
-metod, kommer den att anropas för att bestämma underklassstatusen enligt beskrivningen i PEP 3119. Annars är inst en instans av cls om dess klass är en underklass av cls.En instans inst kan åsidosätta vad som anses vara dess klass genom att ha ett
__class__
-attribut.Ett objekt cls kan åsidosätta om det betraktas som en klass och vilka dess basklasser är genom att ha ett
__bases__
-attribut (som måste vara en tupel av basklasser).
-
Py_hash_t PyObject_Hash(PyObject *o)¶
- En del av Stabil ABI.
Beräknar och returnerar hashvärdet för ett objekt o. Vid misslyckande returneras
-1
. Detta är motsvarigheten till Python-uttryckethash(o)
.Ändrad i version 3.2: Returtypen är nu Py_hash_t. Detta är ett signerat heltal av samma storlek som
Py_ssize_t
.
-
Py_hash_t PyObject_HashNotImplemented(PyObject *o)¶
- En del av Stabil ABI.
Ställ in en
TypeError
som anger atttype(o)
inte är hashable och returnera-1
. Denna funktion behandlas speciellt när den lagras i entp_hash
slot, vilket gör det möjligt för en typ att uttryckligen ange för tolkaren att den inte är hashbar.
-
int PyObject_IsTrue(PyObject *o)¶
- En del av Stabil ABI.
Returnerar
1
om objektet o anses vara sant, och0
annars. Detta är likvärdigt med Python-uttrycketnot not o
. Vid misslyckande returneras-1
.
-
int PyObject_Not(PyObject *o)¶
- En del av Stabil ABI.
Returnerar
0
om objektet o anses vara sant, och1
annars. Detta är likvärdigt med Python-uttrycketnot o
. Vid misslyckande returneras-1
.
-
PyObject *PyObject_Type(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
När o är icke-
NULL
, returnerar ett typobjekt som motsvarar objekttypen för objektet o. Om det misslyckas, uppstårSystemError
och returnerarNULL
. Detta är likvärdigt med Python-uttryckettype(o)
. Denna funktion skapar en ny strong reference till returvärdet. Det finns egentligen ingen anledning att använda den här funktionen istället förPy_TYPE()
-funktionen, som returnerar en pekare av typen PyTypeObject*, förutom när en ny strong reference behövs.
-
int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)¶
Returnerar icke-noll om objektet o är av typen type eller en subtyp av type, och
0
annars. Båda parametrarna måste vara icke-NULL
.
-
Py_ssize_t PyObject_Size(PyObject *o)¶
-
Py_ssize_t PyObject_Length(PyObject *o)¶
- En del av Stabil ABI.
Returnerar längden på objektet o. Om objektet o tillhandahåller antingen sekvens- eller mappningsprotokollet returneras sekvenslängden. Vid fel returneras
-1
. Detta är motsvarigheten till Python-uttrycketlen(o)
.
-
Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)¶
Returnerar en uppskattad längd för objektet o. Försök först att returnera dess faktiska längd, sedan en uppskattning med hjälp av
__length_hint__()
, och slutligen returnera standardvärdet. Vid fel returneras-1
. Detta är motsvarigheten till Python-uttrycketoperator.length_hint(o, defaultvalue)
.Tillagd i version 3.4.
-
PyObject *PyObject_GetItem(PyObject *o, PyObject *key)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Returnerar element av o som motsvarar objektet key eller
NULL
om det misslyckas. Detta är motsvarigheten till Python-uttrycketo[key]
.
-
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)¶
- En del av Stabil ABI.
Mappa objektet key till värdet v. Utlös ett undantag och returnera
-1
vid misslyckande; returnera0
vid framgång. Detta är motsvarigheten till Python-satseno[key] = v
. Den här funktionen stjäl inte en referens till v.
-
int PyObject_DelItem(PyObject *o, PyObject *key)¶
- En del av Stabil ABI.
Ta bort mappningen för objektet key från objektet o. Returnerar
-1
vid misslyckande. Detta är likvärdigt med Python-satsendel o[key]
.
-
int PyObject_DelItemString(PyObject *o, const char *key)¶
- En del av Stabil ABI.
Detta är samma sak som
PyObject_DelItem()
, men key anges som en const char* UTF-8-kodad bytessträng, i stället för en PyObject*.
-
PyObject *PyObject_Dir(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Detta motsvarar Python-uttrycket
dir(o)
, som returnerar en (eventuellt tom) lista med strängar som passar för objektargumentet, ellerNULL
om det uppstod ett fel. Om argumentet ärNULL
, är detta som Pythonsdir()
, som returnerar namnen på de aktuella lokala platserna; i detta fall, om ingen exekveringsram är aktiv, returnerasNULL
menPyErr_Occurred()
kommer att returnera false.
-
PyObject *PyObject_GetIter(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Detta är likvärdigt med Python-uttrycket
iter(o)
. Det returnerar en ny iterator för objektargumentet, eller själva objektet om objektet redan är en iterator. UtlöserTypeError
och returnerarNULL
om objektet inte kan itereras.
-
PyObject *PyObject_SelfIter(PyObject *obj)¶
- Returnera värde: Ny referens. En del av Stabil ABI.
Detta motsvarar Python-metoden
__iter__(self): return self
. Den är avsedd för iterator-typer, som ska användas iPyTypeObject.tp_iter
-slot.
-
PyObject *PyObject_GetAIter(PyObject *o)¶
- Returnera värde: Ny referens. En del av Stabil ABI sedan version 3.10.
Detta är motsvarigheten till Python-uttrycket
aiter(o)
. Tar ettAsyncIterable
-objekt och returnerar enAsyncIterator
för det. Detta är typiskt en ny iterator men om argumentet är enAsyncIterator
returnerar den sig själv. UtlöserTypeError
och returnerarNULL
om objektet inte kan itereras.Tillagd i version 3.10.
-
void *PyObject_GetTypeData(PyObject *o, PyTypeObject *cls)¶
- En del av Stabil ABI sedan version 3.12.
Hämta en pekare till underklassspecifika data som reserverats för cls.
Objektet o måste vara en instans av cls, och cls måste ha skapats med negativa
PyType_Spec.basicsize
. Python kontrollerar inte detta.Vid fel, sätt ett undantag och returnera
NULL
.Tillagd i version 3.12.
-
Py_ssize_t PyType_GetTypeDataSize(PyTypeObject *cls)¶
- En del av Stabil ABI sedan version 3.12.
Returnerar storleken på det instansminnesutrymme som reserverats för cls, dvs. storleken på det minne som
PyObject_GetTypeData()
returnerar.Detta kan vara större än vad som begärdes med
-PyType_Spec.basicsize
; det är säkert att använda denna större storlek (t.ex. medmemset()
).Typen cls måste ha skapats med negativ
PyType_Spec.basicsize
. Python kontrollerar inte detta.Vid fel, skapa ett undantag och returnera ett negativt värde.
Tillagd i version 3.12.
-
void *PyObject_GetItemData(PyObject *o)¶
Hämta en pekare till data per artikel för en klass med
Py_TPFLAGS_ITEMS_AT_END
.Vid fel, ställ in ett undantag och returnera
NULL
.TypeError
uppstår om o inte harPy_TPFLAGS_ITEMS_AT_END
inställt.Tillagd i version 3.12.
-
int PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg)¶
Besök den hanterade ordlistan över obj.
Denna funktion får endast anropas i en traversefunktion av den typ som har flaggan
Py_TPFLAGS_MANAGED_DICT
inställd.Tillagd i version 3.13.
-
void PyObject_ClearManagedDict(PyObject *obj)¶
Rensa den hanterade ordlistan för obj.
Denna funktion får endast anropas i en traversefunktion av den typ som har flaggan
Py_TPFLAGS_MANAGED_DICT
inställd.Tillagd i version 3.13.
-
int PyUnstable_Object_EnableDeferredRefcount(PyObject *obj)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Aktivera uppskjuten referensräkning på obj, om det stöds av körtiden. I free-threaded-versionen gör detta att tolken kan undvika referensräkningsjusteringar för obj, vilket kan förbättra prestanda för flera trådar. Avvägningen är att obj endast kommer att avallokeras av den spårande skräpsamlaren, och inte när tolken inte längre har några referenser till den.
Denna funktion returnerar
1
om uppskjuten referensräkning är aktiverad på obj och0
om uppskjuten referensräkning inte stöds eller om tolken ignorerade tipset, t.ex. när uppskjuten referensräkning redan är aktiverad på obj. Denna funktion är trådsäker och kan inte misslyckas.Den här funktionen gör ingenting på byggen med GIL aktiverat, som inte stöder uppskjuten referensräkning. Den gör inte heller något om obj inte är ett objekt som spåras av skräpsamlaren (se
gc.is_tracked()
ochPyObject_GC_IsTracked()
).Denna funktion är avsedd att användas strax efter att obj har skapats, av den kod som skapar det, t.ex. i objektets
tp_new
slot.Tillagd i version 3.14.
-
int PyUnstable_Object_IsUniqueReferencedTemporary(PyObject *obj)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Kontrollerar om obj är ett unikt temporärt objekt. Returnerar
1
om det är känt att obj är ett unikt temporärt objekt, och0
annars. Denna funktion kan inte misslyckas, men kontrollen är konservativ och kan returnera0
i vissa fall även om obj är ett unikt temporärt objekt.Om ett objekt är ett unikt temporärt objekt, är det garanterat att den aktuella koden har den enda referensen till objektet. För argument till C-funktioner bör detta användas istället för att kontrollera om referensräknaren är
1
. Från och med Python 3.14 undviker tolken internt vissa ändringar av referensräknaren när objekt laddas till operandstacken genom att låna referenser när det är möjligt, vilket innebär att en referensräknare på1
i sig inte garanterar att ett funktionsargument är unikt refererat.I exemplet nedan anropas
my_func
med ett unikt temporärt objekt som argument:my_func([1, 2, 3])
I exemplet nedan anropas
my_func
inte med ett unikt temporärt objekt som argument, även om dess refcount är1
:min_lista = [1, 2, 3] my_func(min_lista)
Se även funktionen
Py_REFCNT()
.Tillagd i version 3.14.
-
int PyUnstable_IsImmortal(PyObject *obj)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Denna funktion returnerar icke-noll om obj är immortal, och noll annars. Denna funktion kan inte misslyckas.
Anteckning
Objekt som är odödliga i en CPython-version är inte garanterat odödliga i en annan.
Tillagd i version 3.14.
-
int PyUnstable_TryIncRef(PyObject *obj)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Ökar referensantalet för obj om det inte är noll. Returnerar
1
om objektets referensantal har ökats framgångsrikt. Annars returnerar denna funktion0
.PyUnstable_EnableTryIncRef()
måste ha anropats tidigare på obj annars kan denna funktion felaktigt returnera0
i free threading-bygget.Denna funktion är logiskt ekvivalent med följande C-kod, förutom att den beter sig atomiskt i free threading build:
if (Py_REFCNT(op) > 0) { Py_INCREF(op); returnera 1; } return 0;
Detta är tänkt som en byggsten för att hantera svaga referenser utan att behöva använda Python svagt referensobjekt.
Normalt kräver korrekt användning av denna funktion stöd från obj:s deallokator (
tp_dealloc
). Följande skiss kan t.ex. anpassas för att implementera en ”weakmap” som fungerar som enWeakValueDictionary
för en viss typ:PyMutex mutex; PyObjekt * add_entry(weakmap_key_type *key, PyObject *value) { PyUnstable_EnableTryIncRef(värde); weakmap_type weakmap = ...; PyMutex_Lock(&mutex); weakmap_add_entry(weakmap, nyckel, värde); PyMutex_Unlock(&mutex); Py_RETURN_NONE; } PyObject * get_value(weakmap_key_type *key) { weakmap_type weakmap = ...; PyMutex_Lock(&mutex); PyObject *result = weakmap_find(weakmap, nyckel); if (PyUnstable_TryIncRef(resultat)) { // `result` är säkert att använda PyMutex_Unlock(&mutex); returnera resultat; } // om vi kommer hit börjar `result` samlas in som skräp, // men har inte tagits bort från den svaga kartan ännu PyMutex_Unlock(&mutex); returnera NULL; } // tp_dealloc-funktion för svaga mappvärden void value_dealloc(PyObject *värde) { weakmap_type weakmap = ...; PyMutex_Lock(&mutex); weakmap_remove_value(weakmap, värde); ... PyMutex_Unlock(&mutex); }
Tillagd i version 3.14.
-
void PyUnstable_EnableTryIncRef(PyObject *obj)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Möjliggör efterföljande användning av
PyUnstable_TryIncRef()
på obj. Den som anropar måste ha en strong reference till obj när detta anropas.Tillagd i version 3.14.
-
int PyUnstable_Object_IsUniquelyReferenced(PyObject *op)¶
- Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.
Avgör om op endast har en referens.
På GIL-aktiverade byggsystem är den här funktionen likvärdig med Py_REFCNT(op) == 1.
På en fritt trådad byggnation kontrollerar detta om op:s reference count är lika med ett och kontrollerar dessutom om op endast används av denna tråd. Py_REFCNT(op) == 1 är inte trådsäker på fritt trådade byggnader; föredra denna funktion.
Den som anropar måste ha en attached thread state, trots att den här funktionen inte anropar Python-tolken. Denna funktion kan inte misslyckas.
Tillagd i version 3.14.