القيمة النهائية لا تبقى marker؛ update_wrapper تربط الغلاف بالدالة wrapped نفسها. [1] [2]
الخلاصة السريعة
الرابط النهائي هو wrapped هنا. [1] [2]
- القيمة النهائية لا تبقى marker؛ update_wrapper تربط الغلاف بالدالة wrapped نفسها. [1] [2]
- في CPython 3.12.14، نضع wrapped.__wrapped__=marker وwrapped.tag="bud"؛ wrapper.tag="own"، والخيارات افتراضية. [1] [2]
- wrapper.__wrapped__ is wrapped تعطي True، ومقارنتها بـmarker تعطي False؛ wrapper.tag تصبح bud. [1] [2]
- التنفيذ يُحدّث __dict__ أولًا، ثم يعين __wrapped__ أخيرًا للأصل؛ wrapped.__wrapped__ تبقى marker هنا. [1] [2]
- تحكم مستقل بلا رابط سابق: السمة المنسوخة leaf، والرابط إلى control_wrapped. marker كائن للاختبار؛ لا نستدعي الأجسام أو نفحص توقيعًا أو سلسلة روابط. [1] [2]
الرابط النهائي
القيمة النهائية لا تبقى marker؛ update_wrapper تربط الغلاف بالدالة wrapped نفسها. [1] [2]
سمة موجودة
في CPython 3.12.14، نضع wrapped.__wrapped__=marker وwrapped.tag="bud"؛ wrapper.tag="own"، والخيارات افتراضية. [1] [2]
النتيجة
wrapper.__wrapped__ is wrapped تعطي True، ومقارنتها بـmarker تعطي False؛ wrapper.tag تصبح bud. [1] [2]
from functools import update_wrapper def wrapped():pass def wrapper():pass marker=object();wrapped.__wrapped__=marker wrapped.tag="bud";wrapper.tag="own" update_wrapper(wrapper,wrapped) print(wrapper.__wrapped__ is wrapped, wrapper.__wrapped__ is marker,wrapper.tag) [1] [2]

الترتيب والتحكم
التنفيذ يُحدّث __dict__ أولًا، ثم يعين __wrapped__ أخيرًا للأصل؛ wrapped.__wrapped__ تبقى marker هنا. [1] [2]
print(wrapped.__wrapped__ is marker) def control_wrapped():pass def control_wrapper():pass control_wrapped.tag="leaf" update_wrapper(control_wrapper,control_wrapped) print(control_wrapper.__wrapped__ is control_wrapped, control_wrapper.tag) [1] [2]
تحكم مستقل بلا رابط سابق: السمة المنسوخة leaf، والرابط إلى control_wrapped. marker كائن للاختبار؛ لا نستدعي الأجسام أو نفحص توقيعًا أو سلسلة روابط. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
