اشیاء ارجاع ضعیف¶
پایتون از ارجاعهای ضعیف بهعنوان اشیاء درجه یک پشتیبانی میکند. دو نوع شیء مشخص وجود دارند که ارجاعهای ضعیف را مستقیماً پیادهسازی میکنند. نوع اول یک شیء ارجاع ساده است و نوع دوم تا جایی که میتواند، بهعنوان پراکسی برای شیء اصلی عمل میکند.
-
int PyWeakref_Check(PyObject *ob)¶
اگر ob یا یک ارجاع باشد یا یک شیء پراکسی، مقدار غیرصفر برمیگرداند. این تابع همیشه موفق میشود.
-
int PyWeakref_CheckRef(PyObject *ob)¶
اگر ob یک شیء ارجاع یا زیرکلاسی از نوع ارجاع باشد، مقدار غیر صفر برمیگرداند. این تابع همیشه موفق میشود.
-
int PyWeakref_CheckRefExact(PyObject *ob)¶
اگر ob یک شیء ارجاع باشد اما زیرکلاسی از نوع ارجاع نباشد، مقدار ناصفر برمیگرداند. این تابع همیشه با موفقیت اجرا میشود.
-
int PyWeakref_CheckProxy(PyObject *ob)¶
اگر ob یک شیء پراکسی باشد، مقدار غیرصفر برمیگرداند. این تابع همیشه موفق میشود.
-
PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء ارجاع ضعیف برای شیء ob برمیگرداند. این تابع همیشه یک ارجاع جدید برمیگرداند، اما تضمین نمیشود که شیء جدیدی ایجاد کند؛ ممکن است یک شیء ارجاع موجود برگردانده شود. پارامتر دوم، callback، میتواند یک شیء فراخوانیپذیر باشد که هنگام زبالهروبی ob اعلان دریافت میکند؛ این شیء باید یک پارامتر واحد بپذیرد که خودِ شیء ارجاع ضعیف خواهد بود. callback همچنین میتواند None یا NULL باشد. اگر ob شیءای نباشد که بتوان ارجاع ضعیفی به آن ایجاد کرد، این تابع استثنای TypeError را ایجاد میکند و NULL برمیگرداند.
-
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء پراکسی ارجاع ضعیف برای شیء ob برمیگرداند. این تابع همیشه یک ارجاع جدید برمیگرداند، اما تضمینشده نیست که شیء جدیدی ایجاد کند؛ ممکن است یک شیء پراکسی موجود برگردانده شود. پارامتر دوم، callback، میتواند یک شیء فراخوانیپذیر باشد که هنگام زبالهروبی شدن ob اطلاعرسانی دریافت میکند؛ باید یک پارامتر واحد بپذیرد که خودِ شیء ارجاع ضعیف خواهد بود. callback همچنین میتواند None یا NULL باشد. اگر ob شیء ارجاع ضعیفپذیری نباشد، این تابع TypeError ایجاد میکند و NULL برمیگرداند.
-
int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)¶
- قسمتی از ABI پایدار از نسخهی 3.13.
یک strong reference به شیء مورد ارجاع را از یک ارجاع ضعیف، ref، در *pobj قرار دهید.
در صورت موفقیت، *pobj را به یک strong reference جدید به شیء مورد ارجاع تنظیم میکند و ۱ را برمیگرداند.
اگر ارجاع مرده باشد، *pobj را برابر NULL قرار دهید و 0 را برگردانید.
در صورت خطا، یک استثنا برانگیخته و -1 بازگردانده میشود.
اضافه شده در نسخهی 3.13.
-
int PyWeakref_IsDead(PyObject *ref)¶
بررسی میکند که آیا ارجاع ضعیف ref مرده است. اگر ارجاع مرده باشد 1 را برمیگرداند، اگر زنده باشد 0 را، و اگر ref یک شیء ارجاع ضعیف نباشد، -1 را همراه با تنظیم خطا برمیگرداند.
اضافه شده در نسخهی 3.14.
-
void PyObject_ClearWeakRefs(PyObject *object)¶
- قسمتی از ABI پایدار.
این تابع توسط هندلر tp_dealloc برای پاکسازی ارجاعهای ضعیف فراخوانی میشود.
این تابع ارجاعهای ضعیفِ object را پیمایش میکند و برای ارجاعهایی که کالبک دارند، کالبکهایشان را فراخوانی میکند. این تابع وقتی بازمیگردد که تلاش برای همهی کالبکها انجام شده باشد.
-
PyObject **PyObject_GET_WEAKREFS_LISTPTR(PyObject *object)¶
یک اشارهگر به فهرست پیوندی داخلی ارجاعات ضعیف به object را برگردانید. object باید از ارجاعات ضعیف پشتیبانی کند و نباید NULL باشد.
این تابع صرفاً برای استفادهی داخلی در نظر گرفته شده است. از طریق اشارهگر بازگرداندهشده، به فهرست ارجاعات ضعیف دسترسی پیدا نکنید و آن را تغییر ندهید.
-
void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)¶
این است API ناپایداراین ممکن است بدون هشدار در نسخههای جزئی تغییر کند.
ارجاعهای ضعیف مربوط به object را بدون فراخوانی کالبکها پاکسازی میکند.
این تابع توسط هندلر tp_dealloc برای نوعهایی که نهاییساز دارند (یعنی __del__()) فراخوانی میشود. هندلر این اشیاء ابتدا PyObject_ClearWeakRefs() را برای پاک کردن ارجاعهای ضعیف و فراخوانی کالبکهای آنها فراخوانی میکند، سپس نهاییساز را اجرا میکند و در نهایت این تابع را برای پاک کردن هر ارجاع ضعیفی که ممکن است توسط نهاییساز ایجاد شده باشد فراخوانی میکند.
در بیشتر موارد، استفاده از PyObject_ClearWeakRefs() برای پاک کردن ارجاعهای ضعیف بهجای این تابع مناسبتر است.
اضافه شده در نسخهی 3.13.
©
حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به
تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا
اشکالی یافتید؟
ساخته شده با
Sphinx 9.1.0.