تقنية

abc في بايثون: هل يكفي تبديل الدالة المجردة؟

الإنشاء يفشل بعد تعيين الدالة وحده
قبل التحديث. [1] [2]

التنفيذ الجديد يحتاج تحديث حالة التجريد. [1] [2]

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

لا؛ نحدث الحالة بعد تبديل الدالة في مثالنا. [1] [2]

  • عرفنا Task.run دالة مجردة. [1] [2]
  • استبدلناها بدالة تعيد bud. [1] [2]
  • إنشاء Task ما زال يرفع TypeError. [1] [2]
  • بعد update_abstractmethods ينجح ويعيد bud. [1] [2]
  • اختبرنا 3.12.14 دون تسجيل افتراضي. [1] [2]

المثال

from abc import (ABC, abstractmethod,
 update_abstractmethods)
class Task(ABC):
 @abstractmethod
 def run(self): pass
Task.run=lambda self:'bud'
try:
 Task()
except TypeError:
 print('TypeError')
update_abstractmethods(Task)
print(Task().run())

[1] [2]

الدالة وحالة الفئة

المصدر هنا يعيد حساب أسماء الدوال المجردة من الفئة وأصولها، ثم يضبط الحالة. تعيين الدالة وحده لا يجري هذا الحساب. المخرجان TypeError ثم bud؛ نستعمل الدالة الجديدة بعد التحديث. [1] [2]

الإنشاء يعمل بعد تحديث التجريد
بعد التحديث. [1] [2]

النطاق

نفحص فئتنا في مسار وراثة عادي. يفترض التحديث أن الأصول محدثة؛ لا يحدث الفئات المشتقة تلقائيًا. لا نختبر فئة فوقية مخصصة أو صحة عمل الدالة بمجرد إمكان إنشاء الكائن. [1] [2]

المراجع

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

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

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