تقنية

register في بايثون: هل الفئة الافتراضية ترث الدوال؟

الكائن المسجل يعطي True لفحص النوع وFalse لوجود run
نتيجتا المثال. [1] [2]

التسجيل لا يضيف دوال الفئة الأساسية. [1] [2]

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

تصبح C فئة افتراضية لدى B، دون وراثة run. [1] [2]

  • نعرف B بدالة عادية تعيد 7. [1] [2]
  • الفئة C مستقلة وفارغة. [1] [2]
  • بعد register يعطي isinstance نتيجة True. [1] [2]
  • يبقى فحص وجود run نتيجة False. [1] [2]
  • اختبرنا 3.12.14، دون خطاف تصنيف مخصص. [1] [2]

المثال

from abc import ABC
class B(ABC):
 def run(self):return 7
class C:pass
B.register(C)
x=C()
print(isinstance(x,B))
print(hasattr(x,'run'))

[1] [2]

المخرجان True ثم False. [1] [2]

تصنيف دون توريث

لا يضيف التسجيل B إلى C.__mro__. توضح نسخة بايثون البديلة سجلًا لفحص الفئات؛ لم نفحص المسرّع المكتوب بلغة سي. [1] [2]

بعد التسجيل تبقى الدالة غائبة؛ في فئة ترث B مباشرة تعمل وتعيد 7. [1] [2]

الدالة غائبة في C المسجلة وتعيد 7 مع الوراثة المباشرة
مقارنة بوراثة مباشرة. [1] [2]

حدود النتيجة

المثال يفرق بين قبول فحص النوع ووجود دالة. لا يثبت التسجيل اكتمال واجهة الكائن. [1] [2]

المراجع

  1. Python: abc
  2. CPython 3.12.14: _py_abc.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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