اذهب إلى المحتوى
  • 0

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

ahmed1990

السؤال

Recommended Posts

  • 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'>]
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...