網站首頁 編程語言 正文
Python中__init__的用法和理解
在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())
補充:Python __init__()類構造方法
在創建類時,我們可以手動添加一個 __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("AB教程網","http://www.jb51.net")
注意,由于創建對象時會調用類的構造方法,如果構造函數有多個參數時,需要手動傳遞參數,傳遞方式如代碼中所示(后續章節會做詳細講解)。
運行以上代碼,執行結果為:
AB教程網 的網址為: //www.jb51.net
可以看到,雖然構造方法中有 self、name、add 3 個參數,但實際需要傳參的僅有 name 和 add,也就是說,self 不需要手動傳遞參數。
關于 self 參數,后續章節會做詳細介紹,這里只需要知道,在創建類對象時,無需給 self 傳參即可。
原文鏈接:https://blog.csdn.net/luzhan66/article/details/82822896
相關推薦
- 2022-04-25 C#條件拼接Expression<Func<T,?bool>>的使用_C#教程
- 2022-12-15 如何使用Python最小二乘法擬合曲線代碼詳解_python
- 2023-08-01 在 TypeScript 中 interface 和 type 的區別
- 2023-01-18 Python中的裝飾器使用_python
- 2022-05-17 IDEA使用Tomcat
- 2022-06-21 C#連接數據庫的幾種方法_C#教程
- 2022-06-26 asp.net使用WebAPI和EF框架結合實現數據的基本操作_實用技巧
- 2022-05-08 關于PyQt5中QtGui.QImage圖片顯示問題解析_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支