日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python之类的继承

發布時間:2023/12/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之类的继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有時候我們會寫多個類,那么類與類之間是可以有繼承關系的。

例如:

#!/usr/bin/env?python #-*-coding:utf-8-*-class?father:def?__init__(self):self.fname?=?'fff'def?func(self):print?'father.func'class?son(father):def?__init__(self):self.sname?=?'sss'def?bar(self):print?'son.bar's1?=?son() s1.bar() s1.func()

輸出結果:

son.bar father.func son.抽煙

從上面的例子可以看到

父類中的方法可以被子類繼承并調用,調用方式為類.父類中方法名


子類可以繼承父類,并重寫父類中的方法


例如:

#!/usr/bin/env?python #-*-coding:utf-8-*- class?father:def?__init__(self):self.fname?=?'fff'def?func(self):print?'father.func'def?bad(self):print?'father.抽煙喝酒' class?son(father):def?__init__(self):self.sname?=?'sss'def?bar(self):print?'son.bar'def?bad(self):print?'son.抽煙' s1?=?son() s1.bar() s1.func()

輸出結果:

son.bar father.func son.抽煙



子類怎么調用父類的構造函數?

在子類的構造函數中執行父類名.__init__(self)即可

#!/usr/bin/env?python #-*-coding:utf-8-*- class?father:def?__init__(self):self.fname?=?'fff'print?'father.init'def?func(self):print?'father.func'def?bad(self):print?'father.抽煙喝酒' class?son(father):def?__init__(self):self.sname?=?'sss'print?'son.init'father.__init__(self)def?bar(self):print?'son.bar'def?bad(self):print?'son.抽煙' s1?=?son() s1.bar()

輸出結果:

son.init father.init son.bar


經典類和新式類

新式類在類名后面有(object)標識。

經典類和新式類的區別:

經典類在類的多重繼承時,有一個bug,就是:應該是廣度優先,但在多重繼承后變成了深度優先。

#!/usr/bin/env?python #-*-coding:utf-8-*- class?A:def?__init__(self):print?'This?is?A'def?save(self):print?'save?from?A' class?B(A):def?__init__(self):print?'This?is?B' class?C(A):def?__init__(self):print?'This?is?C'def?save(self):print?'save?from?C' class?D(B,C):def?__init__(self):print?'This?is?D' c?=?D() c.save()

輸出結果

This?is?D save?from?A


從上例可知,D類繼承了B和C兩個類,并且B優先繼承(多重繼承時,左邊優先繼承)

由于B類中沒有save方法,而B繼承了A,所以D中在繼承B時,save方法應該是A類中的save方法。而D又繼承了C類,所以最后D類中的最后的sava方法應該是繼承C類的,但是上面的結果是D繼承了A類。所以這是一個明顯的bug。

我們把上例換成新式類在測試下結果:

#!/usr/bin/env?python #-*-coding:utf-8-*- class?A(object):def?__init__(self):print?'This?is?A'def?save(self):print?'save?from?A' class?B(A):def?__init__(self):print?'This?is?B' class?C(A):def?__init__(self):print?'This?is?C'def?save(self):print?'save?from?C' class?D(B,C):def?__init__(self):print?'This?is?D' c?=?D() c.save()

輸出結果:

This?is?D save?from?C


總結:新式類修復了經典類的一些bug,并且完全兼容經典類。所以建議使用新式類。









?




































轉載于:https://blog.51cto.com/zengestudy/1858476

總結

以上是生活随笔為你收集整理的Python之类的继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。