تقنية

patch.dict في بايثون: هل clear=True يحذف الأصل دائمًا؟

قيمة القاموس المؤقتة
داخل النطاق. [1] [2]

نستبدل محتوى قاموس مؤلف داخل نطاق مؤقت. [1] [2]

الخلاصة السريعة

لا؛ يستعاد القاموس عند الخروج من النطاق هنا. [1] [2]

  • بدأنا بـa:1 وb:2. [1] [2]
  • clear=True يفرغ القاموس قبل وضع القيم المؤقتة. [1] [2]
  • داخل with نطبع a:7 وحدها. [1] [2]
  • بعد الخروج تعود a:1 وb:2 في الكائن نفسه. [1] [2]
  • اختبرنا 3.12.14؛ لا نسخ عميق للقيم الداخلية. [1] [2]

المثال

from unittest.mock import patch
d={'a':1,'b':2}
with patch.dict(d,{'a':7},clear=True):
 print(d)
print(d)

[1] [2]

داخل النطاق وخارجه

داخل النطاق الناتج {'a': 7}، وبعده {'a': 1, 'b': 2}. استعيدت مفاتيح القاموس، لا كائن بديل للاسم d. دون clear=True تبقى b:2 أثناء هذا التعديل. [1] [2]

عودة مفاتيح القاموس
بعد الخروج. [1] [2]

إذا وقع استثناء

اختبرنا رفع RuntimeError داخل النطاق: استعيد القاموس، وبقي الاستثناء يمر إلى معالجنا الخارجي. الاستعادة لا تعني إخفاء الخطأ. [1] [2]

حدود الاستعادة

الحفظ سطحي؛ تعديل قائمة مشتركة داخل قيمة لا يُلغى تلقائيًا. المثال لقاموس عادي مؤلف؛ لا نعدل البيئة أو الوحدات ولا نثبت عزلًا متزامنًا. [1] [2]

المراجع

  1. Python: unittest.mock patch.dict
  2. CPython3.12.14: unittest/mock.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.