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ư
typetrong 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_flagscủa type. Chức năng này chủ yếu được sử dụng vớiPy_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àotp_flagskhô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 longthay 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àotp_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ề-1và đặ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ề0nếu thành công,-1nế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_ClearWatcherbằng watcher_id chưa được trả về bằng lệnh gọiPyType_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àoPyType_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_Watchbằng watcher_id chưa được trả về bằng lệnh gọiPyType_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ề-1vớ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_Checksử 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_Checkcho 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ọiPyObject_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_alloccủ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ọiPyObject_Init()hoặcPyObject_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_allocslot.Đố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_NewhoặcPyObject_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ớiPyObject_GC_Del()trongtp_free. Nếu không, nó hoạt động giống nhưPyObject_NewhoặcPyObject_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ớiPyObject_Free()trongtp_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_newcủ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 khetp_alloccủ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ề
0nếu thành công hoặc trả về-1và đặ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_GCtrong 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ồmPy_TPFLAGS_HAVE_GCtrong 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ểntp_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ặctype.__qualname__nếutype.__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àNULLhoặ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
TypeErrorvà 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. XemPyCMethodđể biết lớp xác định phương thức. XemPyType_GetModuleByDef()để biết các trường hợp không thể sử dụngPyCMethod.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ủaPyType_GetModule().Nếu không có mô-đun nào được liên kết với loại đã cho, hãy đặt
TypeErrorvà 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ềNULLmà 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ừ
PyModuleDefdef đã cho và trả về mô-đun đó.Nếu không tìm thấy mô-đun nào, hãy tăng
TypeErrorvà 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_inithoặcnb_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ọiPyCMethod.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_tokenbằ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
NULLvà trả về0.Nếu có lỗi, hãy đặt *result thành
NULLvà trả về-1vớ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.Xem thêm
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 metaclass là
NULL, siêu dữ liệu có nguồn gốc từ bases (hoặc các khe Py_tp_base[s] nếu bases làNULL, xem bên dưới).Siêu lớp ghi đè
tp_newkhông được hỗ trợ, ngoại trừ nếutp_newlàNULL.Đố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 bases là
NULLthì khePy_tp_basessẽ được sử dụng thay thế. Nếu đó cũng làNULLthì khePy_tp_basesẽ được sử dụng thay thế. Nếu đó cũng làNULLthì 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ảiNULL, mô-đun sẽ được liên kết với loại mới và sau đó có thể được truy xuất bằngPyType_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ệnhclass. 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 callingtype(hoặc siêu dữ liệu) hơn các hàmPyType_From*. Cụ thể:__new__()không được gọi trên lớp mới (và nó phải được đặt thànhtype.__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ố bases và
NULLlàm khetp_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_newkhô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_newkhô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_newkhô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_newkhô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_newkhô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_newkhô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_basicsizesẽ đượ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ớibasicsizeâm, Python sẽ chèn phần đệm khi cần để đáp ứng các yêu cầu căn chỉnh củatp_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ệutp_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ừaitemsizechỉ 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_itemsizecủ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_HEAPTYPEkhô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.
-
const char *name¶
-
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,PyMappingMethodsvàPyAsyncMethodsvới tiền tốPy_được thêm vào. Ví dụ: sử dụng:Py_nb_addđể đặtPyNumberMethods.nb_add
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:tp_weaklistoffset(thay vào đó hãy sử dụngPy_TPFLAGS_MANAGED_WEAKREFnếu có thể)tp_dictoffset(thay vào đó hãy sử dụngPy_TPFLAGS_MANAGED_DICTnếu có thể)tp_vectorcall_offset(sử dụng"__vectorcalloffset__"trong PyMemberDef)
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ù trongPy_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_baseshoặcPy_tp_basecó 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ủaPyType_FromSpecWithBases().Thay đổi trong phiên bản 3.9: Các vị trí trong
PyBufferProcscó thể được đặt trong API không giới hạn.Thay đổi trong phiên bản 3.11:
bf_getbuffervàbf_releasebufferhiện có sẵn dưới tên limited API.Thay đổi trong phiên bản 3.14: Trường
tp_vectorcallhiện có thể được đặt bằngPy_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(để rõ ràng, thíchPy_TP_USE_SPEChơnNULL)
-
int slot¶
-
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_Speccủ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ệtPy_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ớiPy_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ànhPyType_Speccủa lớp. Mở rộng tớiNULL.Added in version 3.14.