Tilldela objekt på heapen¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- Returnera värde: Ny referens.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- Returnera värde: Ny referens.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- Returnera värde: Lånad referens. En del av Stabil ABI.
Initialiserar ett nyallokerat objekt op med dess typ och initiala referens. Returnerar det initialiserade objektet. Andra fält i objektet initialiseras inte. Trots sitt namn är denna funktion inte relaterad till objektets
__init__()
-metod (tp_init
slot). Specifikt anropar den här funktionen inte objektets__init__()
-metod.I allmänhet bör du betrakta denna funktion som en lågnivårutin. Använd
tp_alloc
där det är möjligt. För implementering avtp_alloc
för din typ, föredraPyType_GenericAlloc()
ellerPyObject_New()
.Anteckning
Denna funktion initialiserar endast objektets minne som motsvarar den ursprungliga
PyObject
-strukturen. Den nollställer inte resten.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- Returnera värde: Lånad referens. En del av Stabil ABI.
Detta gör allt som
PyObject_Init()
gör, och initierar även längdinformationen för ett objekt med variabel storlek.Anteckning
Denna funktion initialiserar endast en del av objektets minne. Den nollställer inte resten.
-
PyObject_New(TYPE, typeobj)¶
Allokerar ett nytt Python-objekt med hjälp av C-strukturtypen TYPE och Python-typobjektet typeobj (
PyTypeObject*
) genom att anropaPyObject_Malloc()
för att allokera minne och initiera det somPyObject_Init()
. Anroparen kommer att äga den enda referensen till objektet (d.v.s. dess referensantal kommer att vara ett).Undvik att anropa detta direkt för att allokera minne för ett objekt; anropa istället typens
tp_alloc
slot.När en typs
tp_alloc
-plats fylls i ärPyType_GenericAlloc()
att föredra framför en anpassad funktion som helt enkelt anropar detta makro.Detta makro anropar inte
tp_alloc
,tp_new
(__new__()
), ellertp_init
(__init__()
).Detta kan inte användas för objekt med
Py_TPFLAGS_HAVE_GC
inställt itp_flags
; användPyObject_GC_New
istället.Minne som allokerats av detta makro måste frigöras med
PyObject_Free()
(anropas vanligtvis via objektetstp_free
slot).Anteckning
Det är inte säkert att det returnerade minnet har nollställts helt innan det initialiserades.
Anteckning
Detta makro konstruerar inte ett fullständigt initialiserat objekt av den angivna typen; det allokerar bara minne och förbereder det för ytterligare initialisering av
tp_init
. För att konstruera ett helt initialiserat objekt, anropa typeobj istället. Till exempel:PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
-
PyObject_NewVar(TYPE, typeobj, size)¶
Som
PyObject_New
utom:Den allokerar tillräckligt med minne för TYPE-strukturen plus size-fält (
Py_ssize_t
) med den storlek som anges av fältettp_itemsize
i typeobj.Minnet initialiseras på samma sätt som
PyObject_InitVar()
.
Detta är användbart för att implementera objekt som t.ex. tupler, som kan bestämma sin storlek vid konstruktionstillfället. Om fältmatrisen bäddas in i samma allokering minskar antalet allokeringar, vilket förbättrar minneshanteringens effektivitet.
Undvik att anropa detta direkt för att allokera minne för ett objekt; anropa istället typens
tp_alloc
slot.När en typs
tp_alloc
-plats fylls i ärPyType_GenericAlloc()
att föredra framför en anpassad funktion som helt enkelt anropar detta makro.Detta kan inte användas för objekt med
Py_TPFLAGS_HAVE_GC
inställt itp_flags
; användPyObject_GC_NewVar
istället.Minne som allokerats av denna funktion måste frigöras med
PyObject_Free()
(anropas vanligtvis via objektetstp_free
slot).Anteckning
Det är inte säkert att det returnerade minnet har nollställts helt innan det initialiserades.
Anteckning
Detta makro konstruerar inte ett fullständigt initialiserat objekt av den angivna typen; det allokerar bara minne och förbereder det för ytterligare initialisering av
tp_init
. För att konstruera ett helt initialiserat objekt, anropa typeobj istället. Till exempel:PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
-
void PyObject_Del(void *op)¶
Samma som
PyObject_Free()
.
-
PyObject _Py_NoneStruct¶
Objekt som är synligt i Python som
None
. Detta bör endast nås med hjälp avPy_None
-makrot, som utvärderas till en pekare till detta objekt.
Se även
- Modulobjekt
För att tilldela och skapa tilläggsmoduler.