تقنية

abstractmethod في بايثون: هل تنفذ super جسم الدالة المجردة؟

استدعاء جسم الأصل
مثال توضيحي [1] [2]

نفصل تنفيذ الجسم عن إنشاء الفئة. [1] [2]

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

نعم؛ يستعمل الابن تنفيذ الجسم في مثالنا. [1] [2]

  • التجريد لا يفرض جسمًا فارغًا. [1] [2]
  • Base.run تملك تنفيذًا يعيد bud. [1] [2]
  • إنشاء Base يثير TypeError رغم وجوده. [1] [2]
  • Child.run تستدعي super().run() وتضيف leaf. [1] [2]
  • النتيجة bud leaf؛ وراثة عادية على 3.12.14. [1] [2]

التنفيذ والتجريد

التجريد لا يفرض جسمًا فارغًا. [1] [2]

Base.run تملك تنفيذًا يعيد bud. [1] [2]

إنشاء Base يثير TypeError رغم وجوده. [1] [2]

استدعاء من الابن

from abc import ABC,abstractmethod
class Base(ABC):
 @abstractmethod
 def run(self):return "bud"
class Child(Base):
 def run(self):
  return super().run()+" leaf"
try:Base()
except TypeError:print("TypeError")
print(Child().run())

[1] [2]

Child.run تستدعي super().run() وتضيف leaf. [1] [2]

الناتج والنطاق

النتيجة bud leaf؛ وراثة عادية على 3.12.14. [1] [2]

جسم وشرط تجريد
تفسير توضيحي [1] [2]

المراجع

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

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

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