您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python中super(XXXX, self).__init__()的作用是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python中super(XXXX, self).__init__()的作用是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
一言以蔽之:super(XXX, self).init()——對繼承自父類的屬性進行初始化,并且用父類的初始化方法初始化繼承的屬性。
我們先看一個簡單的例子:
class Person(): def __init__(self, name, gender): # 為name和gender賦值 self.name = name self.gender = gender def printinfo(self): print(self.name, self.gender) # Stu類繼承Person類 class Stu(Person): def __init__(self, name, gender, school): # 使用父類的初始化方法來初始化子類name和gender屬性 super(Stu, self).__init__(name, gender) self.school = school def printinfo(self): # 對父類的printinfo方法進行重寫 print(self.name, self.gender, self.school) if __name__=='__main__': stu = Stu('Bob', 'female', '5th') stu.printinfo() >>> Bob female 5th
當然,如果初始化的邏輯與父類的不同,不使用父類的方法,自己重新初始化也是可以的。比如:
class Person(object): def __init__(self, name, gender, age): self.name = name self.gender = gender self.age = age # Student類繼承Person類 class Student(Person): def __init__(self, name, gender, age, school, score): # 調用父類的初始化方法,初始化name、gender、age屬性 super(Student, self).__init__(name,gender, age) # 對name、gender屬性進行改寫。age屬性仍保持父類的初始化方法 self.name = name.upper() # 姓名改為大寫 self.gender = gender.upper() # 性別改為大寫 self.school = school self.score = score s = Student("Alice", "female", "18", "High school", "17") print(s.name, s.gender, s.school, s.score) >>> ALICE FEMALE High school 17
在理解了上面的小例子后,我們再仔細研究一下機器學習中的代碼:
class Net(nn.Module): # 繼承自nn.Moudle def __init__(self): super(Net, self).__init__() # 輸入圖像channel:1;輸出channel:6;5x5卷積核 self.conv1 = nn.Conv2d(1, 6, 5)
super(Net, self).init()的含義:子類Net類繼承父類nn.Module,super(Net, self).init()就是對繼承自父類nn.Module的屬性進行初始化。并且是用nn.Module的初始化方法來初始化繼承的屬性。
也就是:用父類的方法初始化子類的屬性。
有的人肯定會問,為啥要用父類的方法去初始化屬性呢?原因很簡單:就是因為父類的方法已經寫好了,我們只需要調用就可以了。難道你還想自己寫一堆代碼去初始化各種權重和參數,處理一堆forward和backward的邏輯嗎?
最后,多一句嘴,介紹一寫在python中__init()的作用
在python中創建類后,通常會創建一個 init__ ()方法,這個方法會在創建類的實例的時候自動執行。
實例1:【實例化Bob這個對象的時候, __ init__ ()方法會自動執行】:
在下面的示例中,我們在實例化Bob這個對象的時候, __ init__ ()方法就已經自動執行了,如果不是__ init__ ()方法,比如說eat()方法,那就只有在調用時才會執行。
class Person(): def __init__(self): print("是一個人") def eat(self): print("要吃飯") Bob = Person() >>> 是一個人
【實例2】哪些需放入__ init__ ()方法中,哪些不需要???
需要在 __ init__ ()方法中定義:希望有一些操作是在創建實例的時候就自動創建的。在神經網絡代碼中,一些網絡結構的設置,也最好放在 __ init__ ()方法中。
在下述代碼中,我們把money這個屬性也定義在__ init__ ()方法中,這樣就不需要在執行eat()方法后再執行qian()方法。
class Person(): def __init__(self, name,money): print("是一個人") self.name = name self.money = money def eat(self): print("%s要吃飯" % self.name) def qian(self): print("花了%s元" % self.money) Bob = Person("Bob",12) Bob.eat() Bob.qian() >>> 是一個人 Bob要吃飯 花了12元
讀到這里,這篇“Python中super(XXXX, self).__init__()的作用是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。