اشیاء نوع¶
-
type PyTypeObject¶
- قسمتی از ABI پایدار (بهعنوان یک ساختار مبهم).
ساختار C اشیایی که برای توصیف نوعهای توکار استفاده میشوند.
-
PyTypeObject PyType_Type¶
- قسمتی از ABI پایدار.
این شیء نوع برای اشیاء نوع است؛ این همان شیء
typeدر لایهی پایتون است.
-
int PyType_Check(PyObject *o)¶
اگر شیء o یک شیء نوع باشد، مقدار غیرصفر را برمیگرداند؛ این امر شامل نمونههایی از نوعهای مشتقشده از شیء نوع استاندارد نیز میشود. در تمام موارد دیگر، 0 را برمیگرداند. این تابع همیشه با موفقیت انجام میشود.
-
int PyType_CheckExact(PyObject *o)¶
اگر شیء o یک شیء نوع باشد، اما زیرنوعی از شیء نوع استاندارد نباشد، مقدار غیرصفر برمیگرداند. در تمام موارد دیگر ۰ برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
unsigned int PyType_ClearCache()¶
- قسمتی از ABI پایدار.
نهانگاه جستجوی داخلی را پاک میکند. برچسب نسخهی فعلی را برمیگرداند.
-
unsigned long PyType_GetFlags(PyTypeObject *type)¶
- قسمتی از ABI پایدار.
عضو
tp_flagsاز type را برمیگرداند. این تابع در درجهی اول برای استفاده باPy_LIMITED_APIدر نظر گرفته شده است؛ تضمین شده است که بیتهای منفرد پرچم در میان نسخههای پایتون پایدار باقی بمانند، اما دسترسی به خودِtp_flagsبخشی از API محدود نیست.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.4: نوع بازگشتی اکنون
unsigned longاست، بهجایlong.
-
PyObject *PyType_GetDict(PyTypeObject *type)¶
فضای نام داخلی شیء نوع را برمیگرداند که در غیر این صورت تنها از طریق یک پراکسی فقطخواندنی (
cls.__dict__) در دسترس قرار میگیرد. این جایگزینی برای دسترسی مستقیم بهtp_dictاست. دیکشنری بازگرداندهشده باید بهعنوان فقطخواندنی در نظر گرفته شود.این تابع برای موارد خاص تعبیه و پیوند زبانی (language binding) در نظر گرفته شده است؛ مواردی که دسترسی مستقیم به دیکشنری ضروری است و دسترسی غیرمستقیم (مثلاً از طریق پراکسی یا
PyObject_GetAttr()) کافی نیست.ماژولهای توسعهای باید هنگام راهاندازی نوعهای خودشان، همچنان از
tp_dictبهطور مستقیم یا غیرمستقیم استفاده کنند.اضافه شده در نسخهی 3.12.
-
void PyType_Modified(PyTypeObject *type)¶
- قسمتی از ABI پایدار.
نهانگاه جستجوی داخلی را برای نوع و همهی زیرنوعهای آن بیاعتبار میکند. این تابع باید پس از هرگونه تغییر دستی در ویژگیها یا کلاسهای پایهی نوع فراخوانی شود.
-
int PyType_AddWatcher(PyType_WatchCallback callback)¶
کالبک را بهعنوان دیدهبان نوع (type watcher) ثبت میکند. یک شناسهی عدد صحیح نامنفی برمیگرداند که باید به فراخوانیهای آتی
PyType_Watch()پاس داده شود. در صورت خطا (مثلاً وقتی شناسهی دیدهبان دیگری در دسترس نیست)، مقدار-1را برمیگرداند و یک استثنا تنظیم میکند.در ساختهای نخآزاد،
PyType_AddWatcher()نخایمن نیست، بنابراین باید هنگام راهاندازی (پیش از ایجاد اولین نخ) فراخوانی شود.اضافه شده در نسخهی 3.12.
-
int PyType_ClearWatcher(int watcher_id)¶
پاککردن دیدهبان (watcher) شناساییشده با watcher_id (که پیشتر از
PyType_AddWatcher()برگردانده شده است). در صورت موفقیت0و در صورت خطا-1برگردانده میشود (مثلاً اگر watcher_id هرگز ثبت نشده باشد.)یک ماژول توسعهای هرگز نباید
PyType_ClearWatcherرا با یک watcher_id که توسط فراخوانی قبلیPyType_AddWatcher()به آن بازگردانده نشده است، فراخوانی کند.اضافه شده در نسخهی 3.12.
-
int PyType_Watch(int watcher_id, PyObject *type)¶
type را بهعنوان تحت نظارت علامتگذاری میکند. کالبکی که
PyType_AddWatcher()شناسهی watcher_id را به آن اعطا کرده است، هر زمان کهPyType_Modified()تغییری در type را گزارش کند، فراخوانی خواهد شد. (کالبک ممکن است برای یک سری تغییرهای متوالی در type تنها یک بار فراخوانی شود، اگر_PyType_Lookup()بین این تغییرها بر روی type فراخوانی نشود؛ این یک جزئیات پیادهسازی است و ممکن است تغییر کند.)The callback is also invoked when a watched heap type is deallocated.
یک ماژول توسعهای هرگز نباید
PyType_Watchرا با یک watcher_id که پیشتر توسط فراخوانیPyType_AddWatcher()به آن بازگردانده نشده است، فراخوانی کند.اضافه شده در نسخهی 3.12.
تغییر یافته در نسخهی 3.15: The callback is now also invoked when a watched heap type is deallocated.
-
int PyType_Unwatch(int watcher_id, PyObject *type)¶
type را بهعنوان نظارتنشده علامتگذاری میکند. این کار، فراخوانی قبلیِ
PyType_Watch()را خنثی میکند. type نبایدNULLباشد.یک ماژول توسعهای هرگز نباید این تابع را با یک watcher_id که توسط فراخوانی قبلی
PyType_AddWatcher()به آن بازگردانده نشده است، فراخوانی کند.در صورت موفقیت، این تابع
0را برمیگرداند. در صورت شکست، این تابع-1را همراه با استثنای تنظیمشده برمیگرداند.اضافه شده در نسخهی 3.12.
-
typedef int (*PyType_WatchCallback)(PyObject *type)¶
نوع تابع کالبک دیدهبان نوع (type-watcher).
کالبک نباید type را تغییر دهد یا باعث فراخوانی
PyType_Modified()روی type یا هیچ نوعی در ترتیب حل متد (MRO) آن شود؛ نقض این قاعده میتواند منجر به بازگشت بینهایت شود.The callback may be called during type deallocation. In this case, the type object is temporarily resurrected (its reference count is at least 1) and all its attributes are still valid. However, the callback should not store new strong references to the type, as this would resurrect the object and prevent its deallocation.
اضافه شده در نسخهی 3.12.
تغییر یافته در نسخهی 3.15: The callback may now be called during deallocation of a watched heap type.
-
int PyType_HasFeature(PyTypeObject *o, int feature)¶
اگر شیء نوع o ویژگی feature را تنظیم کرده باشد، مقدار غیرصفر برمیگرداند. ویژگیهای نوع با پرچمهای تکبیتی نشان داده میشوند.
-
int PyType_FastSubclass(PyTypeObject *type, int flag)¶
اگر شیء نوع type پرچم زیرکلاس flag را تنظیم کرده باشد، مقدار ناصفر برمیگرداند. پرچمهای زیرکلاس با
Py_TPFLAGS_*_SUBCLASSنشان داده میشوند. این تابع توسط بسیاری از توابع_Checkبرای نوعهای رایج استفاده میشود.همچنین ملاحظه نمائید
PyObject_TypeCheck()، که در توابع_Checkبرای نوعهایی که پرچمهای زیرکلاس ندارند، بهعنوان جایگزینی کندتر استفاده میشود.
-
int PyType_IS_GC(PyTypeObject *o)¶
اگر شیء نوع شامل پشتیبانی از آشکارساز چرخه باشد، مقدار true را برمیگرداند؛ این تابع پرچم نوع
Py_TPFLAGS_HAVE_GCرا بررسی میکند.
-
int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)¶
- قسمتی از ABI پایدار.
اگر a زیرنوعی از b باشد، مقدار درست را برمیگرداند.
این تابع فقط زیرنوعهای واقعی را بررسی میکند، به این معنا که
__subclasscheck__()روی b فراخوانی نمیشود. برای انجام همان بررسیای کهissubclass()انجام میدهد،PyObject_IsSubclass()را فراخوانی کنید.
-
PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
هندلر عام برای جایگاه
tp_allocدر یک شیء نوع. از سازوکار تخصیص حافظه پیشفرض پایتون برای تخصیص حافظه به یک نمونه جدید استفاده میکند، حافظه را صفر میکند، سپس حافظه را مقداردهی اولیه میکند، گویی کهPyObject_Init()یاPyObject_InitVar()فراخوانی شده باشد.برای تخصیص حافظه به یک شیء، این را مستقیماً فراخوانی نکنید؛ در عوض، جایگاه
tp_allocنوع را فراخوانی کنید.برای نوعهایی که از زبالهروبی پشتیبانی میکنند (یعنی پرچم
Py_TPFLAGS_HAVE_GCتنظیم شده باشد)، این تابع مانندPyObject_GC_NewیاPyObject_GC_NewVarرفتار میکند (بهجز اینکه تضمین میشود حافظه پیش از مقداردهی اولیه صفر شود)، و باید درtp_freeباPyObject_GC_Del()جفت شود. در غیر این صورت، مانندPyObject_NewیاPyObject_NewVarرفتار میکند (بهجز اینکه تضمین میشود حافظه پیش از مقداردهی اولیه صفر شود) و باید درtp_freeباPyObject_Free()جفت شود.
-
PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
هندلر عام برای جایگاه
tp_newدر یک شیء نوع است. با استفاده از جایگاهtp_allocنوع، نمونهای جدید ایجاد میکند و شیء حاصل را برمیگرداند.
-
int PyType_Ready(PyTypeObject *type)¶
- قسمتی از ABI پایدار.
یک شیء نوع را نهایی میکند. این تابع باید روی همهی شیءهای نوع فراخوانی شود تا مقداردهی اولیهشان به پایان برسد. این تابع مسئول افزودن جایگاههای بهارثرسیده از کلاس پایهی یک نوع است. در صورت موفقیت
0را برمیگرداند، یا در صورت خطا-1را برمیگرداند و یک استثنا تنظیم میکند.توجه
اگر برخی از کلاسهای پایه پروتکل زبالهروبی را پیادهسازی کرده باشند و نوع ارائهشده در پرچمهایش شامل
Py_TPFLAGS_HAVE_GCنباشد، آنگاه پروتکل زبالهروبی بهطور خودکار از کلاسهای والدش پیادهسازی خواهد شد. در مقابل، اگر نوعی که در حال ایجاد است در پرچمهایش شاملPy_TPFLAGS_HAVE_GCباشد، آنگاه باید خودش پروتکل زبالهروبی را پیادهسازی کند، دستکم با پیادهسازی دستهtp_traverse.
-
PyObject *PyType_GetName(PyTypeObject *type)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.11.
نام نوع را برمیگرداند. برابر است با دریافت ویژگی
__name__نوع.اضافه شده در نسخهی 3.11.
-
PyObject *PyType_GetQualName(PyTypeObject *type)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.11.
نام کامل نوع را برمیگرداند. این کار معادل گرفتن ویژگی
__qualname__نوع است.اضافه شده در نسخهی 3.11.
-
PyObject *PyType_GetFullyQualifiedName(PyTypeObject *type)¶
- قسمتی از ABI پایدار از نسخهی 3.13.
نام کامل نوع را برمیگرداند. معادل
f"{type.__module__}.{type.__qualname__}"است، یاtype.__qualname__اگرtype.__module__رشته نباشد یا برابر با"builtins"باشد.اضافه شده در نسخهی 3.13.
-
PyObject *PyType_GetModuleName(PyTypeObject *type)¶
- قسمتی از ABI پایدار از نسخهی 3.13.
نام ماژول نوع را برمیگرداند. این معادل گرفتن ویژگی
type.__module__است.اضافه شده در نسخهی 3.13.
-
void *PyType_GetSlot(PyTypeObject *type, int slot)¶
- قسمتی از ABI پایدار از نسخهی 3.4.
اشارهگر تابع ذخیرهشده در جایگاه دادهشده را برمیگرداند. اگر نتیجه
NULLباشد، این نشان میدهد که یا جایگاهNULLاست، یا اینکه تابع با پارامترهای نامعتبر فراخوانیشده است. فراخوانندگان معمولاً اشارهگر نتیجه را به نوع تابع مناسب قالبریزی میکنند.برای مقادیر ممکن آرگومان slot به
PyType_Slot.slotمراجعه کنید.اضافه شده در نسخهی 3.4.
تغییر یافته در نسخهی 3.10:
PyType_GetSlot()اکنون میتواند همه انواع را بپذیرد. پیشتر، محدود به نوعهای هیپ بود.
-
PyObject *PyType_GetModule(PyTypeObject *type)¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار از نسخهی 3.10.
شیء ماژول مرتبط با نوع دادهشده را برمیگرداند، هنگامی که این نوع با استفاده از
PyType_FromModuleAndSpec()ایجاد شده باشد.ارجاع بازگرداندهشده از type بهصورت امانتی است و تا زمانی که ارجاعی به type را نگه دارید، معتبر خواهد بود. آن را با
Py_DECREF()یا مشابه آن آزاد نکنید.اگر هیچ ماژولی با نوع دادهشده مرتبط نباشد،
TypeErrorرا تنظیم میکند وNULLرا برمیگرداند.This function is usually used to get the module in which a method is defined. Note that in such a method,
PyType_GetModule(Py_TYPE(self))may not return the intended result.Py_TYPE(self)may be a subclass of the intended class, and subclasses are not necessarily defined in the same module as their superclass. SeePyCMethodto get the class that defines the method. SeePyType_GetModuleByToken()for cases whenPyCMethodcannot be used.اضافه شده در نسخهی 3.9.
-
void *PyType_GetModuleState(PyTypeObject *type)¶
- قسمتی از ABI پایدار از نسخهی 3.10.
وضعیت شیء ماژول مرتبط با نوع دادهشده را برمیگرداند. این یک میانبر برای فراخوانی
PyModule_GetState()بر روی نتیجهیPyType_GetModule()است.اگر هیچ ماژولی با نوع دادهشده مرتبط نباشد،
TypeErrorرا تنظیم میکند وNULLرا برمیگرداند.اگر نوع ماژول مرتبطی داشته باشد اما وضعیت آن
NULLباشد،NULLرا بدون تنظیم استثنا برمیگرداند.اضافه شده در نسخهی 3.9.
-
PyObject *PyType_GetModuleByToken(PyTypeObject *type, const void *mod_token)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.15.
Find the first superclass whose module has the given module token, and return that module.
اگر هیچ ماژولی یافت نشود، یک
TypeErrorایجاد میکند وNULLرا برمیگرداند.این تابع برای استفاده همراه با
PyModule_GetState()جهت گرفتن وضعیت ماژول از متدهای جایگاه (مانندtp_initیاnb_add) و دیگر جاهایی که کلاس تعریفکنندهی متد را نمیتوان با استفاده از قرارداد فراخوانیPyCMethodارسال کرد، در نظر گرفته شده است.اضافه شده در نسخهی 3.15.
-
PyObject *PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار از نسخهی 3.13.
Find the first superclass whose module was created from the given
PyModuleDefdef, or whose module token is equal to def, and return that module.Note that modules created from a
PyModuleDefalways have their token set to thePyModuleDef's address. In other words, this function is equivalent toPyType_GetModuleByToken(), except that it:returns a borrowed reference, and
has a non-
void*argument type (which is a cosmetic difference in C).
ارجاع بازگرداندهشده از type بهصورت امانتی است و تا زمانی که ارجاعی به type را نگه دارید، معتبر خواهد بود. آن را با
Py_DECREF()یا مشابه آن آزاد نکنید.اضافه شده در نسخهی 3.11.
-
int PyType_GetBaseByToken(PyTypeObject *type, void *tp_token, PyTypeObject **result)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
Find the first superclass in type's method resolution order whose
Py_tp_tokentoken is equal to tp_token.اگر یافت شود، *result را برابر با یک ارجاع قوی جدید به آن قرار میدهد و
1را برمیگرداند.اگر یافت نشد، *result را برابر
NULLقرار دهید و0را برگردانید.در صورت خطا، *result را برابر
NULLقرار دهید و-1را همراه با استثنای تنظیمشده برگردانید.
آرگومان result میتواند
NULLباشد که در این صورت *result مقداردهی نمیشود. اگر فقط به مقدار بازگشتی نیاز دارید، از این استفاده کنید.The tp_token argument may not be
NULL.اضافه شده در نسخهی 3.14.
-
int PyUnstable_Type_AssignVersionTag(PyTypeObject *type)¶
- این است API ناپایداراین ممکن است بدون هشدار در نسخههای جزئی تغییر کند.
تلاش میکند تا یک برچسب نسخه را به نوع دادهشده انتساب دهد.
اگر نوع از قبل برچسب نسخهی معتبر داشته باشد یا برچسب جدیدی به آن اختصاص داده شود، مقدار ۱ را برمیگرداند، و اگر نتوان برچسب جدیدی به آن اختصاص داد، مقدار ۰ را برمیگرداند.
اضافه شده در نسخهی 3.12.
-
int PyType_SUPPORTS_WEAKREFS(PyTypeObject *type)¶
اگر نمونههای type از ایجاد ارجاع ضعیف پشتیبانی کنند، مقدار درست و در غیر این صورت مقدار نادرست را برمیگرداند. این تابع همیشه با موفقیت اجرا میشود. type نباید
NULLباشد.همچنین ملاحظه نمائید
ایجاد نوعهای تخصیصیافته از هیپ¶
The following function is used to create heap types:
-
PyObject *PyType_FromSlots(const PySlot *slots)¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Create and return a heap type from a
PySlotarray. See Definition slots for general information on slots, and Type slot IDs for slots specific to type creation.این تابع
PyType_Ready()را روی نوع جدید فراخوانی میکند.توجه داشته باشید که این تابع بهطور کامل با رفتار فراخوانی
type()یا استفاده از دستورclassمطابقت ندارد. با نوعهای پایه یا فراکلاسهای ارائهشده از سوی کاربر، فراخوانیtype(یا فراکلاس) را به توابعPyType_From*ترجیح دهید. بهطور مشخص:__new__()روی کلاس جدید فراخوانی نمیشود (و باید رویtype.__new__تنظیم شود).__init__()روی کلاس جدید فراخوانی نمیشود.__init_subclass__()روی هیچیک از کلاسهای پایه فراخوانی نمیشود.__set_name__()روی توصیفگرهای جدید فراخوانی نمیشود.
Slots are typically defined as a global static constant arrays. However, sometimes slot values are not statically known at compile time. For example, slots like
Py_tp_bases,Py_tp_metaclassandPy_tp_modulerequire live Python objects. In this case, it is recommended to put such slots on the stack, and usePy_slot_subslotsto refer to an array of static slots. For example:static const PySlot my_slots[] = { PySlot_STATIC_DATA(Py_tp_name, "MyClass"), PySlot_FUNC(Py_tp_repr, my_repr_func), ... PySlot_END }; PyObject *make_my_class(PyObject *module) { PySlot all_slots[] = { PySlot_STATIC_DATA(Py_slot_subslots, my_slots), PySlot_DATA(Py_tp_module, module), PySlot_END }; return PyType_FromSlots(all_slots); }
Heap types created without the Py_TPFLAGS_IMMUTABLETYPE flag may be
modified, for example by setting attributes on them, as with classes defined
in Python code.
Sometimes, such modifications are necessary to fully initialize a type,
but you may wish to prevent users from changing the type after
the initialization is done:
-
int PyType_Freeze(PyTypeObject *type)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
برای تغییرناپذیر کردن یک نوع: پرچم
Py_TPFLAGS_IMMUTABLETYPEرا تنظیم کنید.همهی کلاسهای پایهی نوع باید تغییرناپذیر باشند.
در صورت موفقیت،
0را برمیگرداند. در صورت خطا، یک استثنا تنظیم کرده و-1را برمیگرداند.از نوع نباید پیش از تغییرناپذیر شدن آن استفاده شود. برای مثال، نمونههای نوع نباید پیش از تغییرناپذیر شدن نوع ایجاد شوند.
اضافه شده در نسخهی 3.14.
Type slot IDs¶
Most type slot IDs are named like the field names of the structures
PyTypeObject, PyNumberMethods,
PySequenceMethods, PyMappingMethods and
PyAsyncMethods with an added Py_ prefix.
For example, use:
Py_tp_deallocبرای تنظیمPyTypeObject.tp_deallocPy_nb_addبرای تنظیمPyNumberMethods.nb_addPy_sq_lengthبرای تنظیمPySequenceMethods.sq_length
The following slots need additional considerations when specified as slots:
Additional slots do not directly correspond to a PyTypeObject
struct field:
فیلدهای «آفست» زیر را نمیتوان با استفاده از PyType_Slot تنظیم کرد:
tp_weaklistoffset(در صورت امکان، بهجای آن ازPy_TPFLAGS_MANAGED_WEAKREFاستفاده کنید)tp_dictoffset(در صورت امکان، بهجای آن ازPy_TPFLAGS_MANAGED_DICTاستفاده کنید)tp_vectorcall_offset(از"__vectorcalloffset__"در PyMemberDef استفاده کنید)
اگر تغییر به پرچم MANAGED ممکن نباشد (برای مثال، برای vectorcall یا برای پشتیبانی از پایتون قدیمیتر از 3.12)، آفست را در Py_tp_members مشخص کنید. برای جزئیات، مستندات PyMemberDef را ببینید.
هنگام ایجاد نوع هیپ، فیلدهای داخلی زیر به هیچ وجه قابل تنظیم نیستند:
The Py_tp_base slot is equivalent to Py_tp_bases;
both may be set either to a type or a tuple of types.
If both are specified, the value of Py_tp_bases
is used.
Slot values may not be NULL, except for the following:
Py_tp_token(برای شفافیت،Py_TP_USE_SPECرا بهجایNULLترجیح دهید)
تغییر یافته در نسخهی 3.9: جایگاههای PyBufferProcs را میتوان در API نامحدود تنظیم کرد.
تغییر یافته در نسخهی 3.11: bf_getbuffer و bf_releasebuffer اکنون در API محدود در دسترس هستند.
تغییر یافته در نسخهی 3.14: فیلد tp_vectorcall اکنون میتواند با استفاده از Py_tp_vectorcall تنظیم شود. برای جزئیات، به مستندات این فیلد مراجعه کنید.
تغییر یافته در نسخهی 3.15: The Py_tp_bases slot may be set to a single type object,
making it equivalent to the Py_tp_base slot.
Previously, a tuple of types was required.
The following slots correspond to fields in the underlying type structure, but need extra remarks for use as slots:
-
Py_tp_name¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor the name of the type, used to setPyTypeObject.tp_name.This slot (or
PyType_Spec.name) is required to create a type.This may not be used in
PyType_Spec.slots. UsePyType_Spec.nameinstead.جزئیات پیادهسازی در CPython: CPython processes slots in order. It is recommended to put
Py_tp_nameat the beginning of the slots array, so that if processing of a later slots fails, error messages can include the name.اضافه شده در نسخهی 3.15.
-
Py_tp_basicsize¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor the size of the instance in bytes. It is used to setPyTypeObject.tp_basicsize.The value must be positive.
This may not be used in
PyType_Spec.slots. UsePyType_Spec.basicsizeinstead.This slot may not be used with
PyType_GetSlot(). UsePyTypeObject.tp_basicsizeinstead if needed, but be aware that a type's size is often considered an implementation detail.اضافه شده در نسخهی 3.15.
-
Py_tp_extra_basicsize¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor type data size in bytes, that is, how much space instances of the class need in addition to space needed for superclasses.The value is used, together with the size of superclasses, to set
PyTypeObject.tp_basicsize. Python will insert padding as needed to meettp_basicsize's alignment requirements.Use
PyObject_GetTypeData()to get a pointer to subclass-specific memory reserved this way.The value must be positive. To specify that instances need no additional size (that is, size should be inherited), omit the
Py_tp_extra_basicsizeslot rather than set it to zero.Specifying both
Py_tp_basicsizeandPy_tp_extra_basicsizeis an error.This may not be used in
PyType_Spec.slots. Use negativePyType_Spec.basicsizeinstead.This slot may not be used with
PyType_GetSlot().اضافه شده در نسخهی 3.15.
-
Py_tp_itemsize¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor the size of one element of a variable-size type, in bytes. Used to setPyTypeObject.tp_itemsize. Seetp_itemsizedocumentation for caveats.The value must be positive.
If this slot is missing,
tp_itemsizeis inherited. Extending arbitrary variable-sized classes is dangerous, since some types use a fixed offset for variable-sized memory, which can then overlap fixed-sized memory used by a subclass. To help prevent mistakes, inheritingitemsizeis only possible in the following situations:پایه اندازهمتغیر نیست (
tp_itemsizeآن صفر است).مقدار درخواستی
PyType_Spec.basicsizeمثبت است، که نشان میدهد چیدمان حافظهی کلاس پایه معلوم است.PyType_Spec.basicsizeدرخواستشده صفر است، که نشان میدهد زیرکلاس مستقیماً به حافظهی نمونه دسترسی ندارد.با پرچم
Py_TPFLAGS_ITEMS_AT_END.
This may not be used in
PyType_Spec.slots. UsePyType_Spec.itemsizeinstead.This slot may not be used with
PyType_GetSlot().اضافه شده در نسخهی 3.15.
-
Py_tp_flags¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor type flags, used to setPyTypeObject.tp_flags.The
Py_TPFLAGS_HEAPTYPEflag is not set,PyType_FromSpecWithBases()sets it automatically.This may not be used in
PyType_Spec.slots. Use negativePyType_Spec.basicsizeinstead.This slot may not be used with
PyType_GetSlot(). UsePyType_GetFlags()instead.اضافه شده در نسخهی 3.15.
-
Py_tp_bases¶
- قسمتی از ABI پایدار.
Slot IDfor type flags, used to setPyTypeObject.tp_bases.The slot can be set to a tuple of type objects which the newly created type should inherit from, like the "positional arguments" of a Python class definition.
Alternately, the slot can be set to a single type object to specify a single base. The effect is the same as specifying a one-element tuple.
تغییر یافته در نسخهی 3.15: Previously,
Py_tp_basesrequired a tuple of types.
-
Py_tp_base¶
- قسمتی از ABI پایدار.
Equivalent to
Py_tp_bases(withsat the end). If both are specified,Py_tp_basestakes priority and this slot is ignored.تغییر یافته در نسخهی 3.15: Previously,
Py_tp_baserequired a single type, not a tuple.منسوخسازی نرم <Soft deprecated> از نسخهی 3.15: When not targeting older Python versions, prefer
Py_tp_bases.
The following slots do not correspond to public fields in the underlying structures:
-
Py_tp_metaclass¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor the metaclass used to construct the resulting type object. When omitted the metaclass is derived from bases (Py_tp_basesor the bases argument ofPyType_FromMetaclass()).فراکلاسهایی که
tp_newرا بازنویسی میکنند پشتیبانی نمیشوند، مگر آنکهtp_newبرابرNULLباشد.This may not be used in
PyType_Spec.slots. UsePyType_FromMetaclass()to specify a metaclass withPyType_Spec.This slot may not be used with
PyType_GetSlot(). UsePy_TYPE()on the type object instead.اضافه شده در نسخهی 3.15.
-
Py_tp_module¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDfor recording the module in which the new class is defined.The value must be a module object. The module is associated with the new type and can later be retrieved with
PyType_GetModule(). The associated module is not inherited by subclasses; it must be specified for each class individually.This may not be used in
PyType_Spec.slots. UsePyType_FromMetaclass()to specify a module withPyType_Spec.This slot may not be used with
PyType_GetSlot(). UsePyType_GetModule()instead.اضافه شده در نسخهی 3.15.
-
Py_tp_token¶
- قسمتی از ABI پایدار از نسخهی 3.14.
Slot IDfor recording a static memory layout ID for a class.If the class is defined using a
PyType_Spec, and that spec is statically allocated, the token can be set to the spec using the special valuePy_TP_USE_SPEC:static PyType_Slot foo_slots[] = { {Py_tp_token, Py_TP_USE_SPEC},
میتوان آن را به یک اشارهگر دلخواه نیز تنظیم کرد، اما باید مطمئن شوید که:
عمر اشارهگر از عمر کلاس طولانیتر است، بنابراین تا زمانی که کلاس وجود دارد، برای چیز دیگری بازاستفاده نمیشود.
آن به ماژول توسعهای «تعلق دارد» که کلاس در آن قرار دارد، بنابراین با سایر توسعهها تداخل نخواهد کرد.
از
PyType_GetBaseByToken()برای بررسی اینکه آیا ابرکلاس یک کلاس توکن مشخصی دارد یا نه استفاده کنید — یعنی، بررسی کنید که آیا چیدمان حافظه سازگار است یا خیر.برای بهدستآوردن توکن یک کلاس معین (بدون در نظر گرفتن کلاسهای والد)، از
PyType_GetSlot()باPy_tp_tokenاستفاده کنید.اضافه شده در نسخهی 3.14.
-
Py_TP_USE_SPEC¶
- قسمتی از ABI پایدار از نسخهی 3.14.
Used as a value with
Py_tp_tokento set the token to the class'sPyType_Spec. May only be used for classes defined usingPyType_Spec.Expands to
NULL.اضافه شده در نسخهی 3.14.
-
Py_tp_slots¶
- قسمتی از ABI پایدار از نسخهی 3.15.
Slot IDthat works likePy_slot_subslots, except it specifies an array ofPyType_Slotstructures.اضافه شده در نسخهی 3.15.
Soft-deprecated API¶
The following functions are soft deprecated.
They will continue to work, but new features will be added as slots for
PyType_FromSlots(), not as arguments to new PyType_From* functions.
-
PyObject *PyType_FromMetaclass(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases)¶
- قسمتی از ABI پایدار از نسخهی 3.12.
یک نوع هیپ از spec بسازید و بازگردانید (به
Py_TPFLAGS_HEAPTYPEمراجعه کنید).A non-
NULLmetaclass argument corresponds to thePy_tp_metaclassslot.A non-
NULLbases argument corresponds to thePy_tp_basesslot, and takes precedence overPy_tp_basesandPy_tp_basesslots.A non-
NULLmodule argument corresponds to thePy_tp_moduleslot.این تابع
PyType_Ready()را روی نوع جدید فراخوانی میکند.Note that this function does not fully match the behavior of calling
type()or using theclassstatement. See the note inPyType_FromSlots()documentation for details.اضافه شده در نسخهی 3.12.
منسوخسازی نرم <Soft deprecated> از نسخهی 3.15: Prefer
PyType_FromSlots()in new code.
-
PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.10.
معادل
PyType_FromMetaclass(NULL, module, spec, bases)است.اضافه شده در نسخهی 3.9.
تغییر یافته در نسخهی 3.10: این تابع اکنون یک کلاس منفرد را بهعنوان آرگومان bases و
NULLرا بهعنوان جایگاهtp_docمیپذیرد.تغییر یافته در نسخهی 3.12: این تابع اکنون فراکلاسی متناظر با کلاسهای پایهی ارائهشده را مییابد و از آن استفاده میکند. پیشتر، تنها نمونههای
typeبرگردانده میشدند.tp_newمربوط به فراکلاس نادیده گرفته میشود. که ممکن است به مقداردهی اولیهی ناقص منجر شود. ایجاد کلاسهایی که فراکلاس آنهاtp_newرا بازنویسی میکند، منسوخ شده است.تغییر یافته در نسخهی 3.14: ساخت کلاسهایی که فراکلاس آنها
tp_newرا بازنویسی میکند، دیگر مجاز نیست.منسوخسازی نرم <Soft deprecated> از نسخهی 3.15: Prefer
PyType_FromSlots()in new code.
-
PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.3.
معادل
PyType_FromMetaclass(NULL, NULL, spec, bases)است.اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.12: این تابع اکنون فراکلاسی متناظر با کلاسهای پایهی ارائهشده را مییابد و از آن استفاده میکند. پیشتر، تنها نمونههای
typeبرگردانده میشدند.tp_newمربوط به فراکلاس نادیده گرفته میشود. که ممکن است به مقداردهی اولیهی ناقص منجر شود. ایجاد کلاسهایی که فراکلاس آنهاtp_newرا بازنویسی میکند، منسوخ شده است.تغییر یافته در نسخهی 3.14: ساخت کلاسهایی که فراکلاس آنها
tp_newرا بازنویسی میکند، دیگر مجاز نیست.منسوخسازی نرم <Soft deprecated> از نسخهی 3.15: Prefer
PyType_FromSlots()in new code.
-
PyObject *PyType_FromSpec(PyType_Spec *spec)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
معادل
PyType_FromMetaclass(NULL, NULL, spec, NULL)است.تغییر یافته در نسخهی 3.12: این تابع اکنون فراکلاسی متناظر با کلاسهای پایهی ارائهشده در جایگاههای Py_tp_base[s] را مییابد و از آن استفاده میکند. پیشتر، تنها نمونههای
typeبرگردانده میشدند.tp_newمربوط به فراکلاس نادیده گرفته میشود. که ممکن است به مقداردهی اولیهی ناقص منجر شود. ایجاد کلاسهایی که فراکلاس آنهاtp_newرا بازنویسی میکند، منسوخ شده است.تغییر یافته در نسخهی 3.14: ساخت کلاسهایی که فراکلاس آنها
tp_newرا بازنویسی میکند، دیگر مجاز نیست.منسوخسازی نرم <Soft deprecated> از نسخهی 3.15: Prefer
PyType_FromSlots()in new code.
-
type PyType_Spec¶
- قسمتی از ABI پایدار شامل تمام اعضا.
Structure defining a type's behavior, used for soft-deprecated functions like
PyType_FromMetaclass().This structure contains several members that can instead be specified as slots for
PyType_FromSlots(), and an array of slot entries with a simpler structure.-
const char *name¶
Corresponds to
Py_tp_name.
-
int basicsize¶
If positive, corresponds to
Py_tp_basicsize.If negative, corresponds to
Py_tp_extra_basicsizeset to the absolute value.تغییر یافته در نسخهی 3.12: پیشتر، این فیلد نمیتوانست منفی باشد.
-
int itemsize¶
Corresponds to
Py_tp_itemsize.
-
unsigned int flags¶
Corresponds to
Py_tp_flags.
-
PyType_Slot *slots¶
Array of
PyType_Slot(notPySlot) structures.Terminated by the special slot value
{0, NULL}. Each slot ID should be specified at most once.-
type PyType_Slot¶
- قسمتی از ABI پایدار شامل تمام اعضا.
Structure defining optional functionality of a type, used for soft-deprecated functions like
PyType_FromMetaclass().Note that a
PyType_Slotarray may be included in aPySlotarray usingPy_tp_slots, and vice versa usingPy_slot_subslots.Each
PyType_Slotstructuretpslotis interpreted as the followingPySlotstructure:(PySlot){ .sl_id=tpslot.slot, .sl_flags=PySlot_INTPTR | sub_static, .sl_ptr=tpslot.func }
where
sub_staticisPySlot_STATICif the slot requires the flag (such as forPy_tp_methods), or if this flag is present on the "parent"Py_tp_slotsslot (if any).-
int slot¶
Corresponds to
PySlot.sl_id.
-
void *pfunc¶
Corresponds to
PySlot.sl_ptr.
-
int slot¶
-
type PyType_Slot¶
-
const char *name¶