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 av tp_alloc för din typ, föredra PyType_GenericAlloc() eller PyObject_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 anropa PyObject_Malloc() för att allokera minne och initiera det som PyObject_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 är PyType_GenericAlloc() att föredra framför en anpassad funktion som helt enkelt anropar detta makro.

Detta makro anropar inte tp_alloc, tp_new (__new__()), eller tp_init (__init__()).

Detta kan inte användas för objekt med Py_TPFLAGS_HAVE_GC inställt i tp_flags; använd PyObject_GC_New istället.

Minne som allokerats av detta makro måste frigöras med PyObject_Free() (anropas vanligtvis via objektets tp_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ältet tp_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 är PyType_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 i tp_flags; använd PyObject_GC_NewVar istället.

Minne som allokerats av denna funktion måste frigöras med PyObject_Free() (anropas vanligtvis via objektets tp_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 av Py_None-makrot, som utvärderas till en pekare till detta objekt.

Se även

Modulobjekt

För att tilldela och skapa tilläggsmoduler.