Loại đối tượng

type PyTypeObject
Một phần của API có giới hạn (như một cấu trúc mờ đục).

Cấu trúc C của các đối tượng được sử dụng để mô tả các kiểu có sẵn.

PyTypeObject PyType_Type
Một phần của ABI ổn định.

Đây là đối tượng kiểu cho các đối tượng kiểu; nó là đối tượng tương tự như type trong lớp Python.

int PyType_Check(PyObject *o)

Trả về khác 0 nếu đối tượng o là một đối tượng loại, bao gồm các thể hiện của các loại bắt nguồn từ đối tượng loại tiêu chuẩn. Trả về 0 trong tất cả các trường hợp khác. Chức năng này luôn thành công.

int PyType_CheckExact(PyObject *o)

Trả về giá trị khác 0 nếu đối tượng o là một đối tượng kiểu, nhưng không phải là kiểu con của đối tượng kiểu tiêu chuẩn. Trả về 0 trong tất cả các trường hợp khác. Chức năng này luôn thành công.

unsigned int PyType_ClearCache()
Một phần của ABI ổn định.

Xóa bộ đệm tra cứu nội bộ. Trả lại thẻ phiên bản hiện tại.

unsigned long PyType_GetFlags(PyTypeObject *type)
Một phần của ABI ổn định.

Trả về thành viên tp_flags của type. Chức năng này chủ yếu được sử dụng với Py_LIMITED_API; các bit cờ riêng lẻ được đảm bảo ổn định trên các bản phát hành Python, nhưng bản thân quyền truy cập vào tp_flags không phải là một phần của limited API.

Added in version 3.2.

Thay đổi trong phiên bản 3.4: Kiểu trả về bây giờ là unsigned long thay vì long.

PyObject *PyType_GetDict(PyTypeObject *type)

Trả về không gian tên bên trong của đối tượng loại, nếu không thì chỉ được hiển thị thông qua proxy chỉ đọc (cls.__dict__). Đây là sự thay thế cho việc truy cập trực tiếp vào tp_dict. Từ điển được trả về phải được coi là chỉ đọc.

Chức năng này dành cho các trường hợp nhúng và ràng buộc ngôn ngữ cụ thể, trong đó việc truy cập trực tiếp vào lệnh là cần thiết và truy cập gián tiếp (ví dụ: qua proxy hoặc PyObject_GetAttr()) là không đủ.

Các mô-đun mở rộng nên tiếp tục sử dụng tp_dict, trực tiếp hoặc gián tiếp, khi thiết lập loại của riêng chúng.

Added in version 3.12.

void PyType_Modified(PyTypeObject *type)
Một phần của ABI ổn định.

Vô hiệu hóa bộ nhớ đệm tra cứu nội bộ cho loại và tất cả các loại phụ của nó. Hàm này phải được gọi sau bất kỳ sửa đổi thủ công nào đối với các thuộc tính hoặc lớp cơ sở của loại.

int PyType_AddWatcher(PyType_WatchCallback callback)

Đăng ký callback làm người theo dõi kiểu. Trả về ID số nguyên không âm phải được chuyển cho các lệnh gọi tới PyType_Watch() trong tương lai. Trong trường hợp có lỗi (ví dụ: không còn ID người theo dõi), hãy trả về -1 và đặt ngoại lệ.

Trong các bản dựng có luồng tự do, PyType_AddWatcher() không an toàn cho luồng, do đó, nó phải được gọi khi khởi động (trước khi tạo ra luồng đầu tiên).

Added in version 3.12.

int PyType_ClearWatcher(int watcher_id)

Trình theo dõi rõ ràng được xác định bởi watcher_id (trước đây được trả về từ PyType_AddWatcher()). Trả về 0 nếu thành công, -1 nếu có lỗi (ví dụ: nếu watcher_id chưa bao giờ được đăng ký.)

Tiện ích mở rộng không bao giờ được gọi PyType_ClearWatcher bằng watcher_id chưa được trả về bằng lệnh gọi PyType_AddWatcher() trước đó.

Added in version 3.12.

int PyType_Watch(int watcher_id, PyObject *type)

Đánh dấu type là đã xem. Cuộc gọi lại được watcher_id cấp cho PyType_AddWatcher() sẽ được gọi bất cứ khi nào PyType_Modified() báo cáo thay đổi đối với type. (Cuộc gọi lại chỉ có thể được gọi một lần đối với một loạt các sửa đổi liên tiếp đối với type, nếu _PyType_Lookup() không được gọi trên type giữa các lần sửa đổi; đây là chi tiết triển khai và có thể thay đổi.)

Tiện ích mở rộng không bao giờ được gọi PyType_Watch bằng watcher_id chưa được trả về bằng lệnh gọi PyType_AddWatcher() trước đó.

Added in version 3.12.

int PyType_Unwatch(int watcher_id, PyObject *type)

Đánh dấu type là chưa xem. Thao tác này sẽ hoàn tác lệnh gọi trước đó tới PyType_Watch(). type không được là NULL.

Tiện ích mở rộng không bao giờ được gọi hàm này bằng watcher_id chưa được trả về bằng lệnh gọi PyType_AddWatcher() trước đó.

Nếu thành công, hàm này trả về 0. Nếu thất bại, hàm này trả về -1 với một bộ ngoại lệ.

Added in version 3.12.

typedef int (*PyType_WatchCallback)(PyObject *type)

Loại chức năng gọi lại của trình theo dõi kiểu.

Cuộc gọi lại không được sửa đổi type hoặc khiến PyType_Modified() được gọi trên type hoặc bất kỳ loại nào trong MRO của nó; vi phạm quy tắc này có thể gây ra đệ quy vô hạn.

Added in version 3.12.

int PyType_HasFeature(PyTypeObject *o, int feature)

Trả về giá trị khác 0 nếu đối tượng loại o đặt tính năng feature. Các tính năng loại được biểu thị bằng cờ bit đơn.

int PyType_FastSubclass(PyTypeObject *type, int flag)

Trả về khác 0 nếu đối tượng loại type đặt cờ lớp con flag. Cờ lớp con được ký hiệu là Py_TPFLAGS_*_SUBCLASS. Hàm này được nhiều hàm _Check sử dụng cho các loại thông dụng.

Xem thêm

PyObject_TypeCheck(), được sử dụng như một giải pháp thay thế chậm hơn trong các hàm _Check cho các loại không đi kèm với cờ lớp con.

int PyType_IS_GC(PyTypeObject *o)

Trả về true nếu đối tượng loại bao gồm hỗ trợ cho trình phát hiện chu trình; điều này kiểm tra cờ loại Py_TPFLAGS_HAVE_GC.

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
Một phần của ABI ổn định.

Trả về true nếu a là kiểu con của b.

Hàm này chỉ kiểm tra các kiểu con thực tế, có nghĩa là __subclasscheck__() không được gọi trên b. Gọi PyObject_IsSubclass() để thực hiện kiểm tra tương tự như issubclass().

PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.

Trình xử lý chung cho khe tp_alloc của một đối tượng loại. Sử dụng cơ chế phân bổ bộ nhớ mặc định của Python để phân bổ bộ nhớ cho một phiên bản mới, đặt bộ nhớ về 0, sau đó khởi tạo bộ nhớ như thể bằng cách gọi PyObject_Init() hoặc PyObject_InitVar().

Đừng gọi trực tiếp điều này để cấp phát bộ nhớ cho một đối tượng; thay vào đó hãy gọi loại tp_alloc slot.

Đối với các loại hỗ trợ thu thập rác (tức là cờ Py_TPFLAGS_HAVE_GC được đặt), hàm này hoạt động giống như PyObject_GC_New hoặc PyObject_GC_NewVar (ngoại trừ bộ nhớ được đảm bảo bằng 0 trước khi khởi tạo) và phải được ghép nối với PyObject_GC_Del() trong tp_free. Nếu không, nó hoạt động giống như PyObject_New hoặc PyObject_NewVar (ngoại trừ bộ nhớ được đảm bảo bằng 0 trước khi khởi tạo) và phải được ghép nối với PyObject_Free() trong tp_free.

PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.

Trình xử lý chung cho khe tp_new của một đối tượng loại. Tạo một phiên bản mới bằng cách sử dụng khe tp_alloc của loại và trả về đối tượng kết quả.

int PyType_Ready(PyTypeObject *type)
Một phần của ABI ổn định.

Hoàn thiện một đối tượng loại. Điều này nên được gọi trên tất cả các đối tượng loại để hoàn thành quá trình khởi tạo của chúng. Hàm này chịu trách nhiệm thêm các vị trí kế thừa từ lớp cơ sở của một loại. Trả về 0 nếu thành công hoặc trả về -1 và đặt ngoại lệ nếu có lỗi.

Ghi chú

Nếu một số lớp cơ sở triển khai giao thức GC và loại được cung cấp không bao gồm Py_TPFLAGS_HAVE_GC trong các cờ của nó thì giao thức GC sẽ được triển khai tự động từ lớp mẹ của nó. Ngược lại, nếu loại được tạo có bao gồm Py_TPFLAGS_HAVE_GC trong các cờ của nó thì must sẽ tự triển khai giao thức GC bằng cách ít nhất triển khai bộ điều khiển tp_traverse.

PyObject *PyType_GetName(PyTypeObject *type)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.11.

Trả về tên của loại. Tương đương với việc lấy thuộc tính __name__ của loại.

Added in version 3.11.

PyObject *PyType_GetQualName(PyTypeObject *type)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.11.

Trả về tên đủ điều kiện của loại. Tương đương với việc lấy thuộc tính __qualname__ của loại.

Added in version 3.11.

PyObject *PyType_GetFullyQualifiedName(PyTypeObject *type)
Một phần của ABI ổn định kể từ phiên bản 3.13.

Trả về tên đầy đủ của loại. Tương đương với f"{type.__module__}.{type.__qualname__}" hoặc type.__qualname__ nếu type.__module__ không phải là một chuỗi hoặc bằng "builtins".

Added in version 3.13.

PyObject *PyType_GetModuleName(PyTypeObject *type)
Một phần của ABI ổn định kể từ phiên bản 3.13.

Trả về tên mô-đun của loại. Tương đương với việc lấy thuộc tính type.__module__.

Added in version 3.13.

void *PyType_GetSlot(PyTypeObject *type, int slot)
Một phần của ABI ổn định kể từ phiên bản 3.4.

Trả về con trỏ hàm được lưu trong vùng đã cho. Nếu kết quả là NULL, điều này cho biết rằng vị trí đó là NULL hoặc hàm được gọi với các tham số không hợp lệ. Người gọi thường sẽ đưa con trỏ kết quả vào loại hàm thích hợp.

Xem PyType_Slot.slot để biết các giá trị có thể có của đối số slot.

Added in version 3.4.

Thay đổi trong phiên bản 3.10: PyType_GetSlot() hiện có thể chấp nhận tất cả các loại. Trước đây, nó bị giới hạn ở heap types.

PyObject *PyType_GetModule(PyTypeObject *type)
Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định kể từ phiên bản 3.10.

Trả về đối tượng mô-đun được liên kết với loại đã cho khi loại được tạo bằng PyType_FromModuleAndSpec().

Tham chiếu được trả về là borrowed từ type và sẽ hợp lệ miễn là bạn giữ tham chiếu đến type. Không phát hành nó với Py_DECREF() hoặc tương tự.

Nếu không có mô-đun nào được liên kết với loại đã cho, hãy đặt TypeError và trả về NULL.

Hàm này thường được sử dụng để lấy mô-đun trong đó một phương thức được xác định. Lưu ý rằng trong phương pháp như vậy, PyType_GetModule(Py_TYPE(self)) có thể không trả về kết quả mong muốn. Py_TYPE(self) có thể là subclass của lớp dự định và các lớp con không nhất thiết phải được xác định trong cùng một mô-đun với siêu lớp của chúng. Xem PyCMethod để biết lớp xác định phương thức. Xem PyType_GetModuleByDef() để biết các trường hợp không thể sử dụng PyCMethod.

Added in version 3.9.

void *PyType_GetModuleState(PyTypeObject *type)
Một phần của ABI ổn định kể từ phiên bản 3.10.

Trả về trạng thái của đối tượng mô-đun được liên kết với loại đã cho. Đây là lối tắt để gọi PyModule_GetState() theo kết quả của PyType_GetModule().

Nếu không có mô-đun nào được liên kết với loại đã cho, hãy đặt TypeError và trả về NULL.

Nếu type có mô-đun liên kết nhưng trạng thái của nó là NULL, trả về NULL mà không đặt ngoại lệ.

Added in version 3.9.

PyObject *PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)
Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định kể từ phiên bản 3.13.

Tìm siêu lớp đầu tiên có mô-đun được tạo từ PyModuleDef def đã cho và trả về mô-đun đó.

Nếu không tìm thấy mô-đun nào, hãy tăng TypeError và trả về NULL.

Hàm này dự định được sử dụng cùng với PyModule_GetState() để lấy trạng thái mô-đun từ các phương thức vị trí (chẳng hạn như tp_init hoặc nb_add) và những nơi khác mà lớp xác định của phương thức không thể được chuyển bằng cách sử dụng quy ước gọi PyCMethod.

Tham chiếu được trả về là borrowed từ type và sẽ hợp lệ miễn là bạn giữ tham chiếu đến type. Không phát hành nó với Py_DECREF() hoặc tương tự.

Added in version 3.11.

int PyType_GetBaseByToken(PyTypeObject *type, void *token, PyTypeObject **result)
Một phần của ABI ổn định kể từ phiên bản 3.14.

Tìm siêu lớp đầu tiên trong method resolution order của type có mã thông báo Py_tp_token bằng với mã đã cho.

  • Nếu tìm thấy, hãy đặt *result thành strong reference mới cho nó và trả về 1.

  • Nếu không tìm thấy, đặt *result thành NULL và trả về 0.

  • Nếu có lỗi, hãy đặt *result thành NULL và trả về -1 với một bộ ngoại lệ.

Đối số result có thể là NULL, trong trường hợp đó *result không được đặt. Sử dụng điều này nếu bạn chỉ cần giá trị trả về.

Đối số token có thể không phải là NULL.

Added in version 3.14.

int PyUnstable_Type_AssignVersionTag(PyTypeObject *type)
Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.

Cố gắng gán thẻ phiên bản cho loại đã cho.

Trả về 1 nếu loại đã có thẻ phiên bản hợp lệ hoặc một thẻ mới đã được chỉ định hoặc 0 nếu không thể chỉ định thẻ mới.

Added in version 3.12.

int PyType_SUPPORTS_WEAKREFS(PyTypeObject *type)

Trả về true nếu các phiên bản type hỗ trợ tạo tham chiếu yếu, nếu không thì trả về false. Chức năng này luôn thành công. type không được là NULL.

Tạo các kiểu phân bổ Heap

Các hàm và cấu trúc sau đây được sử dụng để tạo heap types.

PyObject *PyType_FromMetaclass(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases)
Một phần của ABI ổn định kể từ phiên bản 3.12.

Tạo và trả về heap type từ spec (xem Py_TPFLAGS_HEAPTYPE).

Siêu dữ liệu metaclass được sử dụng để xây dựng đối tượng kiểu kết quả. Khi metaclassNULL, siêu dữ liệu có nguồn gốc từ bases (hoặc các khe Py_tp_base[s] nếu basesNULL, xem bên dưới).

Siêu lớp ghi đè tp_new không được hỗ trợ, ngoại trừ nếu tp_newNULL.

Đối số bases có thể được sử dụng để chỉ định các lớp cơ sở; nó có thể chỉ là một lớp hoặc một bộ lớp. Nếu basesNULL thì khe Py_tp_bases sẽ được sử dụng thay thế. Nếu đó cũng là NULL thì khe Py_tp_base sẽ được sử dụng thay thế. Nếu đó cũng là NULL thì loại mới bắt nguồn từ object.

Đối số module có thể được sử dụng để ghi lại mô-đun trong đó lớp mới được xác định. Nó phải là một đối tượng mô-đun hoặc NULL. Nếu không phải NULL, mô-đun sẽ được liên kết với loại mới và sau đó có thể được truy xuất bằng PyType_GetModule(). Mô-đun liên quan không được kế thừa bởi các lớp con; nó phải được chỉ định cho từng lớp riêng lẻ.

Hàm này gọi PyType_Ready() trên loại mới.

Lưu ý rằng hàm này not hoàn toàn khớp với hành vi gọi type() hoặc sử dụng câu lệnh class. Với các loại cơ sở hoặc siêu dữ liệu do người dùng cung cấp, hãy ưu tiên calling type (hoặc siêu dữ liệu) hơn các hàm PyType_From*. Cụ thể:

  • __new__() không được gọi trên lớp mới (và nó phải được đặt thành type.__new__).

  • __init__() không được gọi trong lớp mới.

  • __init_subclass__() không được gọi trên bất kỳ căn cứ nào.

  • __set_name__() không được gọi trên các bộ mô tả mới.

Added in version 3.12.

PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.10.

Tương đương với PyType_FromMetaclass(NULL, module, spec, bases).

Added in version 3.9.

Thay đổi trong phiên bản 3.10: Hàm hiện chấp nhận một lớp duy nhất làm đối số basesNULL làm khe tp_doc.

Thay đổi trong phiên bản 3.12: Hàm hiện tìm và sử dụng siêu dữ liệu tương ứng với các lớp cơ sở được cung cấp. Trước đây, chỉ có phiên bản type được trả về.

Zz000zz của siêu dữ liệu là ignored. có thể dẫn đến việc khởi tạo không đầy đủ. Việc tạo các lớp có siêu dữ liệu ghi đè tp_new không được dùng nữa.

Thay đổi trong phiên bản 3.14: Việc tạo các lớp có siêu dữ liệu ghi đè tp_new không còn được phép nữa.

PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.3.

Tương đương với PyType_FromMetaclass(NULL, NULL, spec, bases).

Added in version 3.3.

Thay đổi trong phiên bản 3.12: Hàm hiện tìm và sử dụng siêu dữ liệu tương ứng với các lớp cơ sở được cung cấp. Trước đây, chỉ có phiên bản type được trả về.

Zz000zz của siêu dữ liệu là ignored. có thể dẫn đến việc khởi tạo không đầy đủ. Việc tạo các lớp có siêu dữ liệu ghi đè tp_new không được dùng nữa.

Thay đổi trong phiên bản 3.14: Việc tạo các lớp có siêu dữ liệu ghi đè tp_new không còn được phép nữa.

PyObject *PyType_FromSpec(PyType_Spec *spec)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.

Tương đương với PyType_FromMetaclass(NULL, NULL, spec, NULL).

Thay đổi trong phiên bản 3.12: Hàm hiện tìm và sử dụng siêu dữ liệu tương ứng với các lớp cơ sở được cung cấp trong các khe Py_tp_base[s]. Trước đây, chỉ có phiên bản type được trả về.

Zz000zz của siêu dữ liệu là ignored. có thể dẫn đến việc khởi tạo không đầy đủ. Việc tạo các lớp có siêu dữ liệu ghi đè tp_new không được dùng nữa.

Thay đổi trong phiên bản 3.14: Việc tạo các lớp có siêu dữ liệu ghi đè tp_new không còn được phép nữa.

int PyType_Freeze(PyTypeObject *type)
Một phần của ABI ổn định kể từ phiên bản 3.14.

Tạo một loại bất biến: đặt cờ Py_TPFLAGS_IMMUTABLETYPE.

Tất cả các lớp cơ sở của type phải bất biến.

Nếu thành công, hãy trả về 0. Nếu có lỗi, hãy đặt ngoại lệ và trả về -1.

Loại này không được sử dụng trước khi nó trở thành bất biến. Ví dụ: không được tạo phiên bản loại trước khi loại được đặt thành bất biến.

Added in version 3.14.

type PyType_Spec
Một phần của ABI ổn định (bao gồm tất cả các thành viên).

Cấu trúc xác định hành vi của một loại.

const char *name

Tên loại, dùng để đặt PyTypeObject.tp_name.

int basicsize

Nếu dương, hãy chỉ định kích thước của phiên bản tính bằng byte. Nó được sử dụng để đặt PyTypeObject.tp_basicsize.

Nếu bằng 0, hãy chỉ định rằng tp_basicsize sẽ được kế thừa.

Nếu âm, giá trị tuyệt đối chỉ định lượng không gian của các phiên bản của lớp cần in addition cho siêu lớp. Sử dụng PyObject_GetTypeData() để lấy con trỏ tới bộ nhớ dành riêng cho lớp con theo cách này. Đối với basicsize âm, Python sẽ chèn phần đệm khi cần để đáp ứng các yêu cầu căn chỉnh của tp_basicsize.

Thay đổi trong phiên bản 3.12: Trước đây, trường này không thể âm.

int itemsize

Kích thước của một phần tử thuộc loại có kích thước thay đổi, tính bằng byte. Được sử dụng để đặt PyTypeObject.tp_itemsize. Xem tài liệu tp_itemsize để biết thêm thông tin.

Nếu bằng 0, tp_itemsize được kế thừa. Việc mở rộng các lớp có kích thước thay đổi tùy ý là nguy hiểm, vì một số loại sử dụng phần bù cố định cho bộ nhớ có kích thước thay đổi, sau đó có thể chồng lên bộ nhớ có kích thước cố định được sử dụng bởi một lớp con. Để giúp ngăn ngừa sai sót, việc kế thừa itemsize chỉ có thể thực hiện được trong các trường hợp sau:

  • Cơ sở không có kích thước thay đổi (tp_itemsize của nó).

  • PyType_Spec.basicsize được yêu cầu là dương, cho thấy rằng bố cục bộ nhớ của lớp cơ sở đã được biết.

  • PyType_Spec.basicsize được yêu cầu bằng 0, cho thấy rằng lớp con không truy cập trực tiếp vào bộ nhớ của phiên bản.

  • Với cờ Py_TPFLAGS_ITEMS_AT_END.

unsigned int flags

Đánh cờ, dùng để đặt PyTypeObject.tp_flags.

Nếu cờ Py_TPFLAGS_HEAPTYPE không được đặt, PyType_FromSpecWithBases() sẽ tự động đặt cờ này.

PyType_Slot *slots

Mảng cấu trúc PyType_Slot. Chấm dứt bởi giá trị vị trí đặc biệt {0, NULL}.

Mỗi ID vị trí phải được chỉ định nhiều nhất một lần.

type PyType_Slot
Một phần của ABI ổn định (bao gồm tất cả các thành viên).

Cấu trúc xác định chức năng tùy chọn của một loại, chứa ID vị trí và con trỏ giá trị.

int slot

ID vị trí.

ID vị trí được đặt tên giống như tên trường của các cấu trúc PyTypeObject, PyNumberMethods, PySequenceMethods, PyMappingMethodsPyAsyncMethods với tiền tố Py_ được thêm vào. Ví dụ: sử dụng:

Một vị trí bổ sung được hỗ trợ không tương ứng với trường cấu trúc PyTypeObject:

Không thể đặt các trường “offset” sau bằng PyType_Slot:

Nếu không thể chuyển sang cờ MANAGED (ví dụ: đối với vectorcall hoặc để hỗ trợ Python cũ hơn 3.12), hãy chỉ định phần bù trong Py_tp_members. Xem PyMemberDef documentation để biết chi tiết.

Các trường nội bộ sau đây hoàn toàn không thể được đặt khi tạo loại heap:

Việc đặt Py_tp_bases hoặc Py_tp_base có thể gặp sự cố trên một số nền tảng. Để tránh sự cố, thay vào đó hãy sử dụng đối số bases của PyType_FromSpecWithBases().

Thay đổi trong phiên bản 3.9: Các vị trí trong PyBufferProcs có thể được đặt trong API không giới hạn.

Thay đổi trong phiên bản 3.11: bf_getbufferbf_releasebuffer hiện có sẵn dưới tên limited API.

Thay đổi trong phiên bản 3.14: Trường tp_vectorcall hiện có thể được đặt bằng Py_tp_vectorcall. Xem tài liệu của trường để biết chi tiết.

void *pfunc

Giá trị mong muốn của vị trí. Trong hầu hết các trường hợp, đây là một con trỏ tới một hàm.

Các giá trị pfunc có thể không phải là NULL, ngoại trừ các vị trí sau:

Py_tp_token
Một phần của ABI ổn định kể từ phiên bản 3.14.

Zz000zz ghi lại ID bố cục bộ nhớ tĩnh cho một lớp.

Nếu PyType_Spec của lớp được phân bổ tĩnh, mã thông báo có thể được đặt thành thông số kỹ thuật bằng giá trị đặc biệt Py_TP_USE_SPEC:

tĩnh PyType_Slot foo_slots[] = {
   {Py_tp_token, Py_TP_USE_SPEC},

Nó cũng có thể được đặt thành một con trỏ tùy ý, nhưng bạn phải đảm bảo rằng:

  • Con trỏ tồn tại lâu hơn lớp, vì vậy nó không được sử dụng lại cho mục đích khác trong khi lớp tồn tại.

  • Nó "thuộc về" mô-đun mở rộng nơi lớp đó tồn tại, vì vậy nó sẽ không xung đột với các tiện ích mở rộng khác.

Sử dụng PyType_GetBaseByToken() để kiểm tra xem siêu lớp của một lớp có mã thông báo nhất định hay không - nghĩa là kiểm tra xem bố cục bộ nhớ có tương thích hay không.

Để nhận mã thông báo cho một lớp nhất định (không cần xem xét các siêu lớp), hãy sử dụng PyType_GetSlot() với Py_tp_token.

Added in version 3.14.

Py_TP_USE_SPEC
Một phần của ABI ổn định kể từ phiên bản 3.14.

Được sử dụng làm giá trị với Py_tp_token để đặt mã thông báo thành PyType_Spec của lớp. Mở rộng tới NULL.

Added in version 3.14.