<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在使用pytorch框架時,難免要自己定義網路。於是,super(XXXX, self).init(),就成了自定義網路結構時必不可少的第一句。但是,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__()的作用了的文章就介紹到這了,更多相關Python super(XXXX, self).__init__()內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45