<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
super().__init__() 、 super(B,self).__init__()
python裡的super().__init__()有什麼作用?很多同學沒有弄清楚。
super()用來呼叫父類別(基礎類別)的方法,__init__()是類的構造方法,
super().__init__() 就是呼叫父類別的init方法, 同樣可以使用super()去呼叫父類別的其他方法。
需要注意的是python2、3的super寫法稍有不同。
__init__() 是python中的建構函式,在建立物件的時"自動呼叫"。
定義類時可以不寫init方法,系統會預設建立,
你也可以寫一個,讓你的類在建立時完成一些“動作”。
如果子類B和父類別A,都寫了init方法,
那麼A的init方法就會被B覆蓋。想呼叫A的init方法需要用super去呼叫。
當然,在B內部,除了用super呼叫父類別的方法,也可以用父類別名呼叫,例:
class B(A): def __init__(self): A.__init__(self) print("B init")
有人可能會誤解“覆蓋”的意思,認為“覆蓋”了就是沒有,為什麼還能通過super呼叫?
覆蓋了並不是沒有了,A的方法終都還在,但需要在B內部用super呼叫。
例:
A裡寫了一個方法hi(), B繼承自A, B裡也寫了一個方法hi()。
B的物件在外部呼叫hi(), 就只能呼叫B裡面寫的這個hi()。
想通過B呼叫A的hi(),只能在B內部用super().hi()呼叫。
class A: def hi(self): print("A hi") class B(A): def hello(self): print("B hello") b = B() b.hi() # B裡沒有寫hi(),這裡呼叫的是繼承自A的hi() ------------------------------------------------------------------ class A: def hi(self): print("A hi") class B(A): def hi(self): print("B hi") b = B() b.hi() # 這裡呼叫的就是B自己的hi() ------------------------------------------------------------------ class A: def hi(self): print("A hi") class B(A): def hi(self): super().hi() # 通過super呼叫父類別A的hi() print("B hi") b = B() b.hi() # 這裡呼叫的就是B裡面的hi()
Python3.x 和 Python2.x 的一個區別: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
例:
python3 直接寫成 : super().__init__()
python2 必須寫成 :super(本類名,self).__init__()
Python3.x 範例:
class A: def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super().add(x) b = B() b.add(2) # 3
Python2.x 範例:
#!/usr/bin/python # -*- coding: UTF-8 -*- class A(object): # Python2.x 記得繼承 object def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super(B, self).add(x) b = B() b.add(2) # 3
最底層:先寫一個父類別A
class A: def __init__(self): print('A')
第二層:讓 B、C、D 繼承自A
class B(A): def __init__(self): print('B') super().__init__() class C(A): def __init__(self): print('C') super().__init__() class D(A): def __init__(self): print('D') super().__init__()
第三層: E、F、G 繼承
class E(B, C): def __init__(self): print('E') super().__init__() class F(C, D): def __init__(self): print('F') super().__init__() class G(E, F): def __init__(self): print('G') super().__init__()
看看G的繼承順序
我們發現G繼承自E, F是並列的,初始化的時候不會先把E初始化完畢才初始化F。
下面是三種不同的繼承、呼叫,對比他們的區別,搞清楚super().__init__()的用途。
子類名稱繼承內容Puple繼承所有Puple_Init繼承,但覆蓋了init方法Puple_Super繼承,但覆蓋了init方法,並在init裡面新增了super().__init__()4.2、執行結果與對比
到此這篇關於python中super().__init__()作用詳解的文章就介紹到這了,更多相關python中super().__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