• 0

هل يمكن استدعاء تابع صنف الأب من صنف الابن في بايثون؟

أريد أن أقوم باستدعاء توابع صنف الأب من الصنف الابن، هنالك طريقة لفعل ذلك في الجافا والبيرل عن طريق استخدام super فهل توجد طريقة لفعل ذلك في بايثون؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

توجد في بايثون أيضا دالة super كما في اللغات الأخرى وتعمل تقريبا بنفس الطريقة وصياغتها العامة كالتالي:

super(type[, object-or-type])

هذه الدالة مفيدة جدا عند حاجتك إلى الوصول إلى توابع موروثة تم تجاوزها في الصنف. ترتيب البحث هو نفسه الذي تستخدمه دالة getattr() إلا أنه يتم تجاوز النوع.
مثال بسيط على استخدام super:

class Foo(Bar):
    def baz(self, arg):
        return super(Foo, self).baz(arg)

ملاحظة: يمكنك استخدام الدالةsuper فقط في أصناف الأساليب الجديدة.
كما أنصحك أيضا باستخدام CLASS.__bases__ كما في المثال التالي:

class A:
   def __init__(self):
        print "I am Class %s"%self.__class__.__name__
        for parentClass in self.__class__.__bases__:
              print "   I am inherited from:",parentClass.__name__
              #parentClass.foo(self) <- call parents function with self as first param
class B(A):pass
class C(B):pass
a,b,c = A(),B(),C()

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن