تا ۶۰ درصد تخفیف شگفت انگیز نوروزی! (‌ آخرین فرصت )

اطلاعات بیشتر..
ثانیه
دقیقه
ساعت
روز
مرتضی
5 سال پیش توسط مرتضی مطرح شد
1 پاسخ

عملکرد super در ارث بری از چند کلاس در پایتون

سلام
به این کد نگاه کنید :

class First():
def __init__(self):
print ("first")
class Second(First):
def __init__(self):
super().__init__()
print ("second")
class Third(First):
def __init__(self):
super()
print ("third")
class Fourth(Second ,Third):
def __init__(self):
super().__init__()
print ("that's it")
Fourth()

خروجیش به این صورته :

third
second
that's it

اینجور که من متوجه شدم پایتون میگه وقتی که از چند کلاس ارث بری میکنیم super() به اولین کلاس اشاره میکنه و درصورتی که اون متد رو نداشت به کلاس بعدی الی آخر
حالا اینجا کلاس second متد init رو داره و خب به اون اشاره میکنه اما وقتی که به

super().__init__()

کلاس second میرسه به جای اینکه بره سراغ کلاسی که second ازش ارث بری کرده یعنی First میره سراغ init کلاس دومی که کلاس Fourth ارث بری کرده یعنی third و اون رو اجرا میکنه

و حالا اگر به super() کلاس Third هم .__init__() رو اضافه کنیم یعنی :

class First():
def __init__(self):
print ("first")
class Second(First):
def __init__(self):
super().__init__()
print ("second")
class Third(First):
def __init__(self):
super().__init__()
print ("third")
class Fourth(Second ,Third):
def __init__(self):
super().__init__()
print ("that's it")
Fourth()

خروجی میشه :

first
third
second
that's it

میبینیم که بعد از اینکه init کلاس third رو اجرا کرده و اون هم init کلاس super رو صدا زده نگاه میکنه میبینه که ما کلاس سومی در Fourth ارث بری نکردیم و میاد به کلاس third نگاه میکنه که از چه کلاسی ارث بری کرده که اینجا first باشه و init اون رو اجرا میکنه

خلاصه سوالم اینه برداشت من درسته یا دارم چرت میگم 😂


پایتون
شی
گرایی
ارث
ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

در پایتون به این شکل هست که اگر مایل هستید متد سازنده کلاس پدر اجرا بشه باید از

super().__init__(...)

استفاده بشه حتما


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام