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_initslot). 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_allocdär det är möjligt. För implementering avtp_allocfö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_allocslot.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_GCinställt itp_flags; användPyObject_GC_Newistället.Minne som allokerats av detta makro måste frigöras med
PyObject_Free()(anropas vanligtvis via objektetstp_freeslot).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_Newutom: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_itemsizei 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_allocslot.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_GCinställt itp_flags; användPyObject_GC_NewVaristället.Minne som allokerats av denna funktion måste frigöras med
PyObject_Free()(anropas vanligtvis via objektetstp_freeslot).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.