سلام
به این کد نگاه کنید :
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 اون رو اجرا میکنه
خلاصه سوالم اینه برداشت من درسته یا دارم چرت میگم 😂
در پایتون به این شکل هست که اگر مایل هستید متد سازنده کلاس پدر اجرا بشه باید از
super().__init__(...)
استفاده بشه حتما
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟