super() وكيل الصنف الأب
آخر تحديث: 2026-09-22
super() وكيل الصنف الأب
super() يُعيد كائن وكيل للصنف الأب؛ يمكن استدعاء تنفيذ الصنف الأب داخل دوال الصنف الابن.
| التصنيف | الدوال المدمجة |
|---|---|
| النوع | دالة مدمجة |
| إصدار بايثون | all |
📝 الصياغة
super([type[, object-or-type]])
⚙️ المعاملات
| type اختياري | The class; the zero-arg form infers it.(القيمة الافتراضية:None) |
|---|---|
| obj اختياري | An instance or class for MRO resolution.(القيمة الافتراضية:None) |
القيمة المُعادة:A proxy to the next class in the MRO; methods can be called through it.
💥 الاستثناءات
RuntimeError— Raised when the zero-arg form is used outside a class.TypeError— Raised when obj is not an instance (or subclass) of type.
▶ مثال
عدّل الكود واضغط تشغيل لرؤية النتيجة في لوحة المخرجات:
المخرجات:
A.hello
B.hello
🏷️ دوال مدمجة ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريباً — تابعونا.
❓ أسئلة شائعة
Qما الذي يفعله super()؟
Aيستدعي تنفيذ الأب الذي يحمل نفس الاسم من أسلوب صنف فرعي: super().hello() يجد ويستدعي أسلوب hello لـ «الصنف التالي» في MRO.
Qلماذا يجب استدعاء super() داخل أسلوب صنف؟
Aالصيغة بدون وسيطات تستدل تلقائيًا على «الصنف الحالي والمثيل الحالي»؛ استدعاؤها خارج صنف (مثل دالة عادية) يُثير RuntimeError: super(): no arguments.
Qمتى يجب كتابة super().__init__()؟
Aعندما يكتب الصنف الفرعي __init__ ويظل يريد من الصنف الأب إتمام تهيئته؛ بدونها لا يُنفّذ __init__ الأب (إلا إذا كان الأب هو object).
Qبأي ترتيب يجد super() الآباء في الوراثة المتعددة؟
Aيتبع MRO (ترتيب حل الأساليب). super() ليس «الأب المباشر» بل «الصنف التالي في MRO»، ومع الوراثة المتعددة يعالج الوراثة المعينية بشكل صحيح ويجنب استدعاء الأب مرتين.