Python self用法詳解
在定義類的過程中,無論是顯式創(chuàng)建類的構造方法,還是向類中添加實例方法,都要求將 self 參數(shù)作為方法的第一個參數(shù)。例如,定義一個 Person 類:
class Person: def __init__(self): print("正在執(zhí)行構造方法") # 定義一個study()實例方法 def study(self): print(self,"正在學Python") zhangsan = Person() zhangsan.study() lisi = Person() lisi.study()
那么,self 到底扮演著什么樣的角色呢?接下來將對 self 參數(shù)做詳細的介紹。
事實上,Python 只是規(guī)定,無論是構造方法還是實例方法,最少要包含一個參數(shù),并沒有規(guī)定該參數(shù)的具體名稱。之所以將其命名為 self,只是程序員之間約定俗成的一種習慣,遵守這個約定,可以使我們編寫的代碼具有更好的可讀性(大家一看到 self,就知道它的作用)。
那么,self 參數(shù)的具體作用是什么呢?打個比方,如果把類比作造房子的圖紙,那么類實例化后的對象是真正可以住的房子。根據(jù)一張圖紙(類),我們可以設計出成千上萬的房子(類對象),每個房子長相都是類似的(都有相同的類變量和類方法),但它們都有各自的主人,那么如何對它們進行區(qū)分呢?
當然是通過 self 參數(shù),它就相當于每個房子的門鑰匙,可以保證每個房子的主人僅能進入自己的房子(每個類對象只能調(diào)用自己的類變量和類方法)。
如果你接觸過其他面向?qū)ο蟮木幊陶Z言(例如 C++),其實 Python 類方法中的 self 參數(shù)就相當于 C++ 中的 this 指針。
也就是說,同一個類可以產(chǎn)生多個對象,當某個對象調(diào)用類方法時,該對象會把自身的引用作為第一個參數(shù)自動傳給該方法,換句話說,Python 會自動綁定類方法的第一個參數(shù)指向調(diào)用該方法的對象。如此,Python解釋器就能知道到底要操作哪個對象的方法了。
因此,程序在調(diào)用實例方法和構造方法時,不需要手動為第一個參數(shù)傳值。例如,更改前面的 Person 類,如下所示:
class Person: def __init__(self): print("正在執(zhí)行構造方法") # 定義一個study()實例方法 def study(self): print(self,"正在學Python") zhangsan = Person() zhangsan.study() lisi = Person() lisi.study()
上面代碼中,study() 中的 self 代表該方法的調(diào)用者,即誰調(diào)用該方法,那么 self 就代表誰。因此,該程序的運行結果為:
正在執(zhí)行構造方法 <__main__.Person object at 0x0000021ADD7D21D0> 正在學Python 正在執(zhí)行構造方法 <__main__.Person object at 0x0000021ADD7D2E48> 正在學Python
另外,對于構造函數(shù)中的 self 參數(shù),其代表的是當前正在初始化的類對象。舉個例子:
class Person: name = "xxx" def __init__(self,name): self.name=name zhangsan = Person("zhangsan") print(zhangsan.name) lisi = Person("lisi") print(lisi.name)
運行結果為:
zhangsan lisi
可以看到,zhangsan 在進行初始化時,調(diào)用的構造函數(shù)中 self 代表的是 zhangsan;而 lisi 在進行初始化時,調(diào)用的構造函數(shù)中 self 代表的是 lisi。
值得一提的是,除了類對象可以直接調(diào)用類方法,還有一種函數(shù)調(diào)用的方式,例如:
class Person: def who(self): print(self) zhangsan = Person() #第一種方式 zhangsan.who() #第二種方式 who = zhangsan.who who()#通過 who 變量調(diào)用zhangsan對象中的 who() 方法
運行結果為:
<__main__.Person object at 0x0000025C26F021D0> <__main__.Person object at 0x0000025C26F021D0>
顯然,無論采用哪種方法,self 所表示的都是實際調(diào)用該方法的對象。
總之,無論是類中的構造函數(shù)還是普通的類方法,實際調(diào)用它們的誰,則第一個參數(shù) self 就代表誰。
以上就是Python self用法詳解的詳細內(nèi)容,更多關于Python self用法的資料請關注腳本之家其它相關文章!
相關文章
在Python中用has_key()方法查找鍵是否存在的教程
這篇文章主要介紹了在Python中用has_key()方法查找鍵是否存在的教程,是Python入門學習中的基礎知識,需要的朋友可以參考下2015-05-05python機器學習實現(xiàn)oneR算法(以鳶尾data為例)
本文主要介紹了python機器學習實現(xiàn)oneR算法(以鳶尾data為例),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Django 實現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸
這篇文章主要介紹了Django 實現(xiàn)將圖片轉(zhuǎn)為Base64,然后使用json傳輸,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03零基礎寫python爬蟲之urllib2中的兩個重要概念:Openers和Handlers
文章首先介紹了urllib2的2個方法,然后詳細介紹了urllib2中的2個重要概念Openers和Handlers的相關知識,希望能對大家有所幫助2014-11-11