ahmed1990 نشر 30 نوفمبر 2015 أرسل تقرير نشر 30 نوفمبر 2015 أحتاج إلى الحصول على جميع الأصناف الفرعية الموروثة من الصنف الرئيسي في لغة بايثون، فهل هنالك طريقة معينة لفعل ذلك؟ اقتباس
0 هشام رزق الله نشر 30 نوفمبر 2015 أرسل تقرير نشر 30 نوفمبر 2015 نعم هنالك طريقة معينة للحصول على جميع الأصناف الفرعية من صنف معين (مثل الصنف الرئيسي)، فجميع الأصناف لديها تابع __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'>] اقتباس
السؤال
ahmed1990
أحتاج إلى الحصول على جميع الأصناف الفرعية الموروثة من الصنف الرئيسي في لغة بايثون، فهل هنالك طريقة معينة لفعل ذلك؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.