سؤال

بالنظر إلى فئة 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.× كل فئة يرث من قاعدة فئة الكائن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top