python子類繼承父類屬性實例_Python實現子類調用父類的初始化實例

前言

python中進行面向對象編程,當在子類的實例中調用父類的屬性時,由于子類的__init__方法重寫了父類的__init__方法,如果在子類中這些屬性未經過初始化,使用時就會出錯。

例如以下的代碼:

class A(object):

def __init__(self):

self.a = 5

def function_a(self):

print('I am from A, my value is %d' % self.a)

class B(A):

def __init__(self):

self.b = 10

def function_b(self):

print('I am from B, my value is %d' % self.b)

self.function_a() # 調用類A的方法,出錯

if __name__ == '__main__':

b = B()

b.function_b()

執行結果如下:

20200312101055.jpg

這時候就需要在類B的__init__方法中先執行類A的__init__方法,腳本才可以正確執行。Python提供了兩種方法來完成這個任務。

方法一: 調用未綁定的父類__init__方法

在類的方法定義時,首個參數均為self。當實例化這個類時,self就被自動綁定到當前的實例。綁定也就意味著這個實例的屬性,方法都可以通過‘self.***的方式進行調用。但是如果通過類名直接調用類的方法,self參數就不會被自動綁定到實例上,可以綁定到我們指定的實例上。也就是子類的實例上,在這里就是類B了。

所以這里所說的未綁定的父類__init__方法 就是指未綁定父類實例的父類__init__方法。

具體的代碼如下:

class A(object):

def __init__(self):

self.a = 5

def function_a(self):

print('I am from A, my value is %d' % self.a)

class B(A):

def __init__(self):

A.__init__(self) # 此處修改了。如果類A的__init__方法需要傳參,也需要傳入對應的參數

self.b = 10

def function_b(self):

print('I am from B, my value is %d' % self.b)

self.function_a()

if __name__ == '__main__':

b = B()

b.function_b()

執行結果如下:

20200312101104.jpg

方法二:調用super函數

super函數是用于調用父類的一個方法,主要是用于解決多繼承問題,避免多繼承帶來的一些問題,當然也可以用來解決單繼承問題,調用父類的__init__方法了。

具體代碼如下:

class A(object):

def __init__(self):

self.a = 5

def function_a(self):

print('I am from A, my value is %d' % self.a)

class B(A):

def __init__(self):

super(B, self).__init__() # 此處修改了

self.b = 10

def function_b(self):

print('I am from B, my value is %d' % self.b)

self.function_a()

if __name__ == '__main__':

b = B()

b.function_b()

執行結果如下:

20200312101119.jpg

總結

兩種方法各有優缺點,但都可以解決問題。

- 方法一簡單直觀,但面對多繼承問題,只能多次調用每個父類的__init__方法

- 方法二不太直觀,但可以解決多繼承問題,會一次性的執行所有的父類的對應方法

所以實際使用時,按照自己的需要選擇一個就行了。

以上這篇Python實現子類調用父類的初始化實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539314.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hadoop 回收站Trash

介紹: Hadoop回收站trash,默認是關閉的。 和Linux系統的回收站設計一樣,HDFS會為每一個用戶創建一個回收站目錄:/user/用戶名/.Trash/,每一個被用戶通過Shell刪除的文件/目錄,在系統回收站中都一個周期&…

opencv畫框返回坐標 python_[python]依靠pynput和pyautogui替換ahk

autohotkey當然是不錯的工具,但是這個東西的社群一直發展的不行。從開始學習python以后,我就不時會希望能找到別的工具替代ahk。Python的眾多包里面確實是有對應的工具的:模擬鼠標和鍵盤的操作可以用pyautogui,而捕捉熱鍵則可以使…

Hadoop SequenceFile

apache原文:http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html 概念: SequenceFile是一個由二進制序列化過的key/value的字節流組成的文本存儲文件,它可以在map/reduce過程中的input/output 的format時被使…

機器學習算法平臺alink_Alink漫談(十二) :在線學習算法FTRL 之 整體設計

Alink漫談(十二) :在線學習算法FTRL 之 整體設計[Toc]0x00 摘要Alink 是阿里巴巴基于實時計算引擎 Flink 研發的新一代機器學習算法平臺,是業界首個同時支持批式算法、流式算法的機器學習平臺。本文和下文將介紹在線學習算法FTRL在Alink中是如何實現的&a…

Linux Shell獲取系統資源使用百分比(CentOS)

CPU使用率: top -b -n 1 | head -n 4 | grep "^Cpu(s)" | awk {print $2} | cut -d u -f 1 內存使用率: free -m | grep ^- | awk {print $3/($3$4)*100"%"} IO使用率(FS_PATH的值改成df -h出來的那些Filesystem名稱即可…

html城市繪制,HTML5/Canvas二分法構建城市版圖

JavaScript語言:JaveScriptBabelCoffeeScript確定var ctx fullscreenCanvas().ctx;var canvas ctx.canvas;function Rect(pos, width, height) {this.pos pos;this.width width;this.height height;}Rect.prototype.update Function.prototype;Rect.prototype…

探測器反向偏壓_近紅外和可見光雙模有機光電探測器

更多精彩,點擊上方藍字關注我們!中英標題近紅外和可見光雙模有機光電探測器Near-infrared and Visible Light Dual-mode Organic Photodetectors圖文導讀研究報告了一種具有三層可見光吸收體/光學間隔層/近紅外(NIR)光吸收體結構的雙模有機光電探測器(OP…

html里post請求404,請求登陸頁面post請求404錯誤,OPTIONS請求通過

點擊登錄的時候option請求是通過的,但post請求失敗。服務端代碼app.js:const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 創建 express 應用c…

python貪吃蛇畢業設計_【干貨|python項目實例——貪吃蛇】- 環球網校

【摘要】當今世界充滿了各種數據,而python是其中一種的重要組成部分。然而,若想其有所應用,我們需要對這些python理論進行實踐。其中包含很多有趣的的過程,然后將其用于某些方面。其中一種應用就是python項目實例。今天環球網校的…

PWA即將推向所有Chrome平臺

\看新聞很累?看技術新聞更累?試試下載InfoQ手機客戶端,每天上下班路上聽新聞,有趣還有料!\\\大多數人應該都聽說了微軟已經著手在Windows商店中增加PWA,這是一個重磅消息!\\\\漸進增強式Web應用…

c++代碼轉為go_Go語言學習筆記六--string編碼

分解探索string編碼轉為byte數組func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 為什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 轉為16進制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

Linux機器件拷貝文件

常用命令有:sftp,scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戲時長計算機,我加入steam五年了,盤點下我買過的22款正版單機游戲

我加入steam五年了,盤點下我買過的22款正版單機游戲2020-02-17 10:50:07104點贊72收藏37評論大家好吖,在2015年的時候朋友就推薦了我入坑steam,不過那個時候更多的知道這是個dota啟動器,慢慢的steam也越來越出名啦,中國…

AdPlayBanner:功能豐富、一鍵式使用的圖片輪播插件

概述 AdPlayBanner:功能豐富、一鍵式使用的圖片輪播插件詳細 代碼下載:http://www.demodashi.com/demo/11312.html AdPlayBanner是一個Android平臺基于ViewPager實現的輪播圖插件,主要用以自動或者手動地播放輪播圖,提供了Fresco、…

pycharm運行模型時怎么設置權重?_使用AMP和Tensor Cores得到更快速,更節省內存的PyTorch模型...

點擊上方“AI派”,關注公眾號,選擇加“星標“或“置頂”導讀只需要添加幾行代碼,就可以得到更快速,更省顯存的PyTorch模型。你知道嗎,在1986年Geoffrey Hinton就在Nature論文中給出了反向傳播算法?此外&…

引入靜態變量_Common Lisp變量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常簡單:只是用一個名字空間,所有表達式中相應位置的值應該是明確的。Common Lisp和Scheme最大的不同是,函數名字空間和數據的名字空間是分離的。操作函數名字空間的語句包括,defun&#xff…

JobTracker和TaskTracker

轉載:http://blog.csdn.net/keda8997110/article/details/8348705 ----------------------------------------------------------------------------------------- JobTracker和TaskTracker JobTracker 對應于 NameNode TaskTracker 對應于 DataNode DataNode 和Na…

c理c利用計算機怎么彈,通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的...

通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的計算機的工作方式:現代計算機的基本體系結構都是采用馮諾依曼結構,馮諾依曼的設計思想最重要之處是"存儲程序"的這個概念。計算機的工作過程,就是執行程序的…

Linux安裝MySQL的兩種方法

原文鏈接:http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 運行平臺:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安裝…

jenkins 手動執行_想知道如何用Jenkins自動執行Python腳本輸出測試報告?

前言在用python做自動化測試時,我們寫好代碼,然后需要執行才能得到測試報告,這時我們可以通過 Jenkins 來進一步完成自動化工作。借助Jenkins,我們可以結合 Git/SVN 自動拉取代碼,可以設置定時構建,接著就可…