تقنية

abc في بايثون: هل يغير register المكرر رمز cache؟

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

نفرق بين تسجيل علاقة جديدة وتكرار العلاقة نفسها. [1] [2] [3]

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

لا في مثالنا؛ التسجيل الجديد يغير الرمز، والتكرار يبقيه. [1] [2] [3]

  • ننشئ A وB مستقلتين. [1] [2] [3]
  • بعد التسجيل الأول t0!=t1 تعطي True. [1] [2] [3]
  • بعد التكرار t1==t2 تعطي True. [1] [2] [3]
  • نقارن بالمساواة؛ لا نفترض خطوة عداد محددة. [1] [2] [3]
  • اختبرنا 3.12.14 دون خطاف مخصص؛ الرمز عام. [1] [2] [3]

المثال

import abc
class A(abc.ABC): pass
class B: pass
t0=abc.get_cache_token()
A.register(B)
t1=abc.get_cache_token()
A.register(B)
t2=abc.get_cache_token()
print(t0!=t1)
print(t1==t2)

[1] [2] [3]

الوصف العام والفرع المقروء

المصدر هنا يعيد الفئة مبكرًا إذا كانت العلاقة مقبولة بالفعل، قبل تغيير الرمز. وصف الوثائق يذكر التغير مع التسجيل عمومًا؛ المثال المقيد يوضح فرع التكرار في التنفيذ المقروء. [1] [2] [3]

تساوي الرمزين بعد تكرار التسجيل
العلاقة نفسها. [1] [2] [3]

النطاق

الرمز ليس خاصًا بـA؛ قد يغيره تسجيل لدى ABC أخرى. لا نمثل خطاف تصنيف مخصصًا أو خيوطًا متزامنة. التسجيل الجديد نفسه يغير الحالة؛ ليس المثال ضمانًا لثبات البرنامج. [1] [2] [3]

المراجع

  1. Python 3.12: ABC cache token
  2. CPython 3.12.14: _abc.c
  3. CPython 3.12.14: ABCMeta wrapper
  4. موضوع تك: لغة بايثون — مفردات
  5. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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