قائمة جميع فئات أساسية في التسلسل الهرمي من الصف ؟
-
05-07-2019 - |
سؤال
بالنظر إلى فئة Foo
(سواء كان نمط جديد الطبقة أو لا), كيف تولد كل قاعدة الطبقات - في أي مكان في التسلسل الهرمي الميراث - أنه issubclass
؟
المحلول
inspect.getmro(cls)
يعمل الجديدة والقديمة على حد سواء أسلوب الطبقات و ترجع نفس NewClass.mro()
:قائمة من فئة كل ما سلف دروس في الترتيب تستخدم الأسلوب القرار.
>>> class A(object):
>>> pass
>>>
>>> class B(A):
>>> pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
نصائح أخرى
ترى __bases__
الملكية المتاحة على الثعبان class
, الذي يحتوي على المجموعة من القواعد فصول:
>>> def classlookup(cls):
... c = list(cls.__bases__)
... for base in c:
... c.extend(classlookup(base))
... return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
inspect.getclasstree()
سيتم إنشاء قائمة متداخلة من دروس و قواعدها.الاستخدام:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
يمكنك استخدام __bases__
tuple كائن الفئة:
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
Tuple عاد قبل __bases__
لديه جميع فئات أساسية.
نأمل أن يساعد!
على الرغم من جوشين الجواب المفيد جدا و الصحيح, كما يمكنك الحصول على الدرجة الهرمي باستخدام .getmro() طريقة لتفقد وحدة من المهم تسليط الضوء على أن بايثون التسلسل الهرمي الميراث على النحو التالي:
مثلا:
class MyClass(YourClass):
وهو وراثة الطبقة
- الطفل فئة
- فئة مشتقة
- فرعية
مثلا:
class YourClass(Object):
ورثت الدرجة
- الفئة الأصل
- قاعدة الطبقة
- الفائقة
فئة واحدة يمكن أن ترث من آخر - فئة' يعزى موروثة - ولا سيما الأساليب الموروثة - هذا يعني أن الحالات من وراثة (الطفل) فئة يمكن الوصول يعزى الموروثة (الأصل) الطبقة
سبيل المثال -> الفئة -> ثم ورثت الطبقات
باستخدام
import inspect
inspect.getmro(MyClass)
سوف تظهر لك الهرمي في بيثون.
في بيثون 3.7 أنت لا تحتاج إلى استيراد فحص نوع.mro سوف تعطيك النتيجة.
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
الاهتمام الذي في بيثون 3.× كل فئة يرث من قاعدة فئة الكائن.