<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Python中定義類經常會用到__init__函數(方法),首先需要理解的是,兩個下劃線開頭的函數是宣告該屬性為私有,不能在類的外部被使用或存取。而__init__函數(方法)支援帶引數類的初始化,也可為宣告該類的屬性(類中的變數)。__init__函數(方法)的第一個引數必須為self,後續引數為自己定義。
從文字理解比較困難,通過下面的例子能非常容易理解這個概念:
例如我們定義一個Box類,有width, height, depth三個屬性,以及計算體積的方法:
#!/usr/bin/python # -*- coding utf-8 -*- #Created by Lu Zhan class Box: def setDimension(self, width, height, depth): self.width = width self.height = height self.depth = depth def getVolume(self): return self.width * self.height * self.depth b = Box() b.setDimension(10, 20, 30) print(b.getVolume())
我們在Box類中定義了setDimension方法去設定該Box的屬性,這樣過於繁瑣,而用__init__()這個特殊的方法就可以方便地自己對類的屬性進行定義,__init__()方法又被稱為構造器(constructor)。
#!/usr/bin/python # -*- coding utf-8 -*- #Created by Lu Zhan class Box: #def setDimension(self, width, height, depth): # self.width = width # self.height = height # self.depth = depth def __init__(self, width, height, depth): self.width = width self.height = height self.depth = depth def getVolume(self): return self.width * self.height * self.depth b = Box(10, 20, 30) print(b.getVolume())
在建立類時,我們可以手動新增一個 __init__() 方法,該方法是一個特殊的類實體方法,稱為構造方法(或建構函式)。
構造方法用於建立物件時使用,每當建立一個類的範例物件時,Python 直譯器都會自動呼叫它。Python 類中,手動新增構造方法的語法格式如下:
def __init__(self,...): 程式碼塊
注意,此方法的方法名中,開頭和結尾各有 2 個下劃線,且中間不能有空格。Python 中很多這種以雙下劃線開頭、雙下劃線結尾的方法,都具有特殊的意義,後續會一一為大家講解。
另外,__init__() 方法可以包含多個引數,但必須包含一個名為 self 的引數,且必須作為第一個引數。也就是說,類的構造方法最少也要有一個 self 引數。例如,仍以 TheFirstDemo 類為例,新增構造方法的程式碼如下所示:
class TheFirstDemo: '''這是一個學習Python定義的第一個類''' #構造方法 def __init__(self): print("呼叫構造方法") # 下面定義了一個類屬性 add = 'http://c.biancheng.net' # 下面定義了一個say方法 def say(self, content): print(content)
注意,即便不手動為類新增任何構造方法,Python 也會自動為類新增一個僅包含 self 引數的構造方法。
僅包含 self 引數的 __init__() 構造方法,又稱為類的預設構造方法。
在上面程式碼的後面,頂頭(不縮排)直接新增如下程式碼:
zhangsan = TheFirstDemo()
這行程式碼的含義是建立一個名為 zhangsan 的 TheFirstDemo 類物件。執行程式碼可看到如下結果:
呼叫構造方法
顯然,在建立 zhangsan 這個物件時,隱式呼叫了我們手動建立的 __init__() 構造方法。
不僅如此,在 __init__() 構造方法中,除了 self 引數外,還可以自定義一些引數,引數之間使用逗號“,”進行分割。例如,下面的程式碼在建立 __init__() 方法時,額外指定了 2 個引數:
class CLanguage: '''這是一個學習Python定義的一個類''' def __init__(self,name,add): print(name,"的網址為:",add) #建立 add 物件,並傳遞引數給建構函式 add = CLanguage("it145.com","//www.jb51.net")
注意,由於建立物件時會呼叫類的構造方法,如果建構函式有多個引數時,需要手動傳遞引數,傳遞方式如程式碼中所示(後續章節會做詳細講解)。
執行以上程式碼,執行結果為:
it145.com 的網址為: //www.jb51.net
可以看到,雖然構造方法中有 self、name、add 3 個引數,但實際需要傳參的僅有 name 和 add,也就是說,self 不需要手動傳遞引數。
關於 self 引數,後續章節會做詳細介紹,這裡只需要知道,在建立類物件時,無需給 self 傳參即可。
到此這篇關於Python中__init__的用法和理解的文章就介紹到這了,更多相關__init__在python中用法內容請搜尋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