English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستتعلم ما هو الوراثة المتعددة في Python وكيفية استخدامها في البرامج. ستعرف أيضًا عن الوراثة المستوى العالي ومبدأ تحليل الطريقة.
مثل C ++، فئةفئةيمكن استخراجها من عدة صفوف أساسية في Python. يُعرف هذا بـ الوراثة المتعددة.
في الوراثة المتعددة، يتم نقل جميع وظائف الصف الأساسي إلى الصف المشتق. لغة الوراثة المتعددة مشابهة لتلك الواحدة.وراثة.
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
في هذا السياق،MultiDerivedتتولد من فئةBase1وBase2.
فئة MultiDerived تستمد من Base1 و Base2.
من جهة أخرى، يمكننا أيضًا وراثة الصف المشتق. يُعرف هذا بـ وراثة مستوى عالٍ. يمكن أن يكون في Python عمقًا أيًا.
في الوراثة المتعددة المستوى، يتم نقل وظائف الصف الأساسي والصف المشتق إلى الصف المشتق الجديد.
فيما يلي مثال يحتوي على تأثير تصويري مناسب.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
في هذا السياق،Derived1منBaseوراثة،Derived2منDerived1وراثة.
كل فئة في Python تستمد من هذه الفئة object. إنها الأنواع الأساسية في Python.
لذلك، من الناحية التقنية، جميع الفئات الأخرى (المدمجة أو المحددة من قبل المستخدم) هي فئات مستمدة، وجميع الأوبجكت هي أمثلة على فئة object.
# خروج: True print(issubclass(list,object)) # خروج: True print(isinstance(5.5,object)) # خروج: True print(isinstance("Hello",object))
في مخطط الوراثة المتعددة، سيتم البحث أولاً عن أي خاصية محددة في الصف الحالي. إذا لم يجد، سيستمر البحث بالعمق أولاً من اليسار إلى اليمين، دون الحاجة إلى البحث في نفس الصف مرتين.
لذلك، في المثال السابق، ترتيب البحث في فئة MultiDerived هو [MultiDerived،Base1،Base2،object]。هذا الترتيب يُعرف أيضًا بـ MultiDerived خطي، وتُسمى مجموعات القواعد التي تبحث في هذا الترتيب بـ“ 方法解析顺序(MRO)”.
يجب أن يمنع MRO ترتيب التفضيل المحلي، ويجب أن يوفر تناظمية. يمكن أن يضمن أن يظهر دائمًا فئة قبل والدتها، وترتيبها يتطابق مع ترتيب الفئات الأساسية.
يمكن اعتبار MRO الخاص بالفئة كـ __mro__ الخاصية أو الطريقة mro(). يرجع الأول إلى tuple، والثاني إلى قائمة.
>>> MultiDerived.__mro__ (#<class '__main__.MultiDerived'>, #<class '__main__.Base1'>, #<class '__main__.Base2'>, #<class 'object'>) >>> MultiDerived.mro() #<class '__main__.MultiDerived'>, #<class '__main__.Base1'>, #<class '__main__.Base2'>, #<class 'object'>]
هذا مثال معقد قليلاً على الوراثة المتعددة والتصوير المرئي لـ MRO.
class X: pass class Y: pass class Z: pass class A(X,Y): pass class B(Y,Z): pass class M(B,A,Z): pass #الإخراج: #<class '__main__.M'>, <class '__main__.B'>, #<class '__main__.A'>, <class '__main__.X'>, #<class '__main__.Y'>, <class '__main__.Z'>, #<class 'object'>] print(M.mro())
يرجى الرجوع إلى هذا المحتوى، لفهم المزيدمناقشة MRO،وافهم طريقة حساب الخوارزميات الفعلية.