ما هو مثال أساسي للميراث الفردي باستخدام الكلمة الرئيسية Super () في Python؟
-
19-09-2019 - |
سؤال
دعنا نقول أن لدي الفصول التالية إعداد:
class Foo:
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar:
def __init__(self, frob, frizzle):
self.frobnicate = frob
self.frotz = 34
self.frazzle = frizzle
كيف يمكنني (إذا استطعت على الإطلاق) استخدم Super () في هذا السياق للقضاء على التعليمات البرمجية المكررة؟
المحلول
في بيثون> = 3.0، مثل هذا:
class Foo():
def __init__(self, frob, frotz)
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle)
super().__init__(frob, 34)
self.frazzle = frizzle
اقرأ المزيد هنا: http://docs.python.org/3.1/library/functions.htmlsuper.
تحرير: كما قال في إجابة أخرى، في بعض الأحيان فقط باستخدام Foo.__init__(self, frob, 34)
يمكن أن يكون الحل الأفضل. (على سبيل المثال، عند العمل مع بعض أشكال الميراث المتعددة.)
نصائح أخرى
على افتراض أنك تريد شريط فئة لتعيين القيمة 34 داخل منشئها، سيعمل ذلك:
class Foo(object):
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle):
super(Bar, self).__init__(frob, frizzle)
self.frotz = 34
self.frazzle = frizzle
bar = Bar(1,2)
print "frobnicate:", bar.frobnicate
print "frotz:", bar.frotz
print "frazzle:", bar.frazzle
لكن، super
يقدم مضاعفاتها الخاصة. انظر على سبيل المثال تعتبر سوبر ضارا. وبعد للتأكد من اكتمال، إليك الإصدار المكافئ دون super
.
class Foo(object):
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle):
Foo.__init__(self, frob, frizzle)
self.frotz = 34
self.frazzle = frizzle
bar = Bar(1,2)
print "frobnicate:", bar.frobnicate
print "frotz:", bar.frotz
print "frazzle:", bar.frazzle
لا تنتمي إلى StackOverflow