• 0

كيف يمكنني إيجاد جميع الأصناف الفرعية من صنف معين في بايثون؟

أحتاج إلى الحصول على جميع الأصناف الفرعية الموروثة من الصنف الرئيسي في لغة بايثون، فهل هنالك طريقة معينة لفعل ذلك؟

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


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

نعم هنالك طريقة معينة للحصول على جميع الأصناف الفرعية من صنف معين (مثل الصنف الرئيسي)، فجميع الأصناف لديها تابع __subclasses__ والذي يقوم بإرجاع جميع الأصناف الفرعية منها، فلنفترض أن لدينا الأصناف التالية:

class Foo(object): pass
class Bab(Foo): pass
class Baz(Foo): pass
class Bing(Bar): pass

يمكنك الحصول على قائمة من أسماء الأصناف الفرعية (من الصنف Foo) عن طريق السطر التالي:

print([cls.__name__ for cls in vars()['Foo'].__subclasses__()])
# ['Bab', 'Baz']

وأما في حالة ما أردت الحصول على الأصناف الفرعية بالإضافة إلى الأصناف المتفرعة منها فيمكنك في هذه الحالة استخدام هذه الطريقة:

def all_subclasses(cls):
    return cls.__subclasses__() + [g for s in cls.__subclasses__()
                                   for g in all_subclasses(s)]

print(all_subclasses(vars()['Foo']))
# [<class '__main__.Bab'>, <class '__main__.Baz'>, <class '__main__.Bing'>]

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


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

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

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

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


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

تسجيل الدخول

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


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