Mengalokasikan objek kedalam struktur data (heap)

PyObject *_PyObject_New(PyTypeObject *type)
Return value: New reference.
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
Return value: New reference.
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
Return value: Borrowed reference. Part of the Stable ABI.

Menginisialisasi objek op yang baru dialokasikan dengan tipe dan referensi awalnya. Mengembalikan objek yang telah diinisialisasi. Bidang lain dari objek tidak diinisialisasi. Terlepas dari namanya, fungsi ini tidak terkait dengan metode __init__() objek (slot:c:member:~PyTypeObject.tp_init ). Secara khusus, fungsi ini tidak tidak memanggil metode __init__() objek.

Secara umum, anggaplah fungsi ini sebagai rutinitas tingkat rendah. Gunakan tp_alloc jika memungkinkan. Untuk mengimplementasikan tp_alloc untuk tipe Anda, pilih PyType_GenericAlloc() atau PyObject_New().

Catatan

Fungsi ini hanya menginisialisasi memori objek yang sesuai dengan struktur awal PyObject. Fungsi ini tidak mengosongkan sisanya.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
Return value: Borrowed reference. Part of the Stable ABI.

Ini melakukan segala hal yang dilakukan PyObject_Init(), dan juga menginisialiasi rentang informasi untuk objek variabel yang terikat ukuran.

Catatan

Fungsi ini hanya menginisialisasi sebagian memori objek. Fungsi ini tidak mengosongkan sisanya.

PyObject_New(TYPE, typeobj)

Mengalokasikan objek Python baru menggunakan tipe struktur C TYPE dan objek tipe Python typeobj (PyTypeObject*) dengan memanggil PyObject_Malloc() untuk mengalokasikan memori dan menginisialisasinya sebagai PyObject_Init(). Pemanggil akan memiliki satu-satunya referensi ke objek tersebut (misal: jumlah referensinya adalah satu).

Hindari memanggil ini secara langsung untuk mengalokasikan memori untuk sebuah objek; panggil slot tp_alloc dari tipe sebagai gantinya.

Ketika mengisi slot tipe tp_alloc , PyType_GenericAlloc() lebih direkomendasikan daripada fungsi kustom yang hanya memanggil makro ini.

Makro ini tidak memanggil tp_alloc, tp_new (__new__()), atau tp_init (__init__()).

Ini tidak dapat digunakan untuk objek dengan Py_TPFLAGS_HAVE_GC yang diatur di tp_flags; gunakan PyObject_GC_New sebagai gantinya.

Memori yang dialokasikan oleh makro ini harus dibebaskan dengan PyObject_Free() (biasanya dipanggil melalui slot objek tp_free ).

Catatan

Memori yang dikembalikan tidak dijamin telah di-nol-kan sepenuhnya sebelum diinisialisasi.

Catatan

Makro ini tidak membuat objek yang diinisialisasi penuh dari tipe yang diberikan; makro ini hanya mengalokasikan memori dan mempersiapkannya untuk inisialisasi lebih lanjut oleh tp_init. Untuk membuat objek yang diinisialisasi secara penuh, panggil typeobj sebagai gantinya. Sebagai contoh:

PyObject * foo = PyObject_CallNoArgs((PyObject *) & PyFoo_Type);
PyObject_NewVar(TYPE, typeobj, size)

Seperti PyObject_New kecuali:

  • Ini mengalokasikan cukup memori untuk struktur TYPE ditambah bidang size (Py_ssize_t) dengan ukuran yang diberikan oleh bidang tp_itemsize dari typeobj.

  • Memori diinisialisasi seperti PyObject_InitVar().

Hal ini berguna untuk mengimplementasikan objek seperti tuple, yang dapat menentukan ukurannya pada saat konstruksi. Menanamkan array of fields ke dalam alokasi yang sama akan mengurangi jumlah alokasi, sehingga meningkatkan efisiensi manajemen memori.

Hindari memanggil ini secara langsung untuk mengalokasikan memori untuk sebuah objek; panggil slot tp_alloc dari tipe sebagai gantinya.

Ketika mengisi slot tipe tp_alloc , PyType_GenericAlloc() lebih direkomendasikan daripada fungsi kustom yang hanya memanggil makro ini.

Ini tidak dapat digunakan untuk objek dengan Py_TPFLAGS_HAVE_GC yang diatur di tp_flags; gunakan PyObject_GC_NewVar sebagai gantinya.

Memori yang dialokasikan oleh fungsi ini harus dibebaskan dengan PyObject_Free() (biasanya dipanggil melalui slot tp_free objek).

Catatan

Memori yang dikembalikan tidak dijamin telah di-nol-kan sepenuhnya sebelum diinisialisasi.

Catatan

Makro ini tidak membuat objek yang diinisialisasi penuh dari tipe yang diberikan; makro ini hanya mengalokasikan memori dan mempersiapkannya untuk inisialisasi lebih lanjut oleh tp_init. Untuk membuat objek yang diinisialisasi secara penuh, panggil typeobj sebagai gantinya. Sebagai contoh:

PyObject * list_instance = PyObject_CallNoArgs((PyObject *) & PyList_Type);
void PyObject_Del(void *op)

Sama seperti PyObject_Free().

PyObject _Py_NoneStruct

Objek yang terlihat di Python sebagai None. Ini hanya boleh diakses menggunakan makro Py_None, yang dievaluasi menjadi penunjuk ke objek ini.

Lihat juga

Module Objects

Untuk mengalokasikan dan membuat modul ekstensi.