English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل الأساسيات في Python

تحكم في عملية Python

الوظائف في Python

أنواع البيانات في Python

عمليات ملفات في Python

أوبجكتات وصفات في Python

تواريخ和时间 في Python

معرفة متقدمة في Python

دليل Python

الوراثة المتعددة في Python

في هذا المقال، ستتعلم ما هو الوراثة المتعددة في Python وكيفية استخدامها في البرامج. ستعرف أيضًا عن الوراثة المستوى العالي ومبدأ تحليل الطريقة.

وراثة متعددة في Python

مثل C ++، فئةفئةيمكن استخراجها من عدة صفوف أساسية في Python. يُعرف هذا بـ الوراثة المتعددة.

في الوراثة المتعددة، يتم نقل جميع وظائف الصف الأساسي إلى الصف المشتق. لغة الوراثة المتعددة مشابهة لتلك الواحدة.وراثة.

مثال

class Base1:
    pass
class Base2:
    pass
class MultiDerived(Base1, Base2):
    pass

في هذا السياق،MultiDerivedتتولد من فئةBase1وBase2.

فئة MultiDerived تستمد من Base1 و Base2.

وراثة مستوى عالٍ في Python

من جهة أخرى، يمكننا أيضًا وراثة الصف المشتق. يُعرف هذا بـ وراثة مستوى عالٍ. يمكن أن يكون في 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،وافهم طريقة حساب الخوارزميات الفعلية.