国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python self用法詳解

瀏覽:50日期:2022-07-04 08:19:11

在定義類的過(guò)程中,無(wú)論是顯式創(chuàng)建類的構(gòu)造方法,還是向類中添加實(shí)例方法,都要求將 self 參數(shù)作為方法的第一個(gè)參數(shù)。例如,定義一個(gè) Person 類:

class Person: def __init__(self): print('正在執(zhí)行構(gòu)造方法') # 定義一個(gè)study()實(shí)例方法 def study(self): print(self,'正在學(xué)Python')zhangsan = Person()zhangsan.study()lisi = Person()lisi.study()

那么,self 到底扮演著什么樣的角色呢?接下來(lái)將對(duì) self 參數(shù)做詳細(xì)的介紹。

事實(shí)上,Python 只是規(guī)定,無(wú)論是構(gòu)造方法還是實(shí)例方法,最少要包含一個(gè)參數(shù),并沒(méi)有規(guī)定該參數(shù)的具體名稱。之所以將其命名為 self,只是程序員之間約定俗成的一種習(xí)慣,遵守這個(gè)約定,可以使我們編寫(xiě)的代碼具有更好的可讀性(大家一看到 self,就知道它的作用)。

那么,self 參數(shù)的具體作用是什么呢?打個(gè)比方,如果把類比作造房子的圖紙,那么類實(shí)例化后的對(duì)象是真正可以住的房子。根據(jù)一張圖紙(類),我們可以設(shè)計(jì)出成千上萬(wàn)的房子(類對(duì)象),每個(gè)房子長(zhǎng)相都是類似的(都有相同的類變量和類方法),但它們都有各自的主人,那么如何對(duì)它們進(jìn)行區(qū)分呢?

當(dāng)然是通過(guò) self 參數(shù),它就相當(dāng)于每個(gè)房子的門(mén)鑰匙,可以保證每個(gè)房子的主人僅能進(jìn)入自己的房子(每個(gè)類對(duì)象只能調(diào)用自己的類變量和類方法)。

如果你接觸過(guò)其他面向?qū)ο蟮木幊陶Z(yǔ)言(例如 C++),其實(shí) Python 類方法中的 self 參數(shù)就相當(dāng)于 C++ 中的 this 指針。

也就是說(shuō),同一個(gè)類可以產(chǎn)生多個(gè)對(duì)象,當(dāng)某個(gè)對(duì)象調(diào)用類方法時(shí),該對(duì)象會(huì)把自身的引用作為第一個(gè)參數(shù)自動(dòng)傳給該方法,換句話說(shuō),Python 會(huì)自動(dòng)綁定類方法的第一個(gè)參數(shù)指向調(diào)用該方法的對(duì)象。如此,Python解釋器就能知道到底要操作哪個(gè)對(duì)象的方法了。

因此,程序在調(diào)用實(shí)例方法和構(gòu)造方法時(shí),不需要手動(dòng)為第一個(gè)參數(shù)傳值。例如,更改前面的 Person 類,如下所示:

class Person: def __init__(self): print('正在執(zhí)行構(gòu)造方法') # 定義一個(gè)study()實(shí)例方法 def study(self): print(self,'正在學(xué)Python')zhangsan = Person()zhangsan.study()lisi = Person()lisi.study()

上面代碼中,study() 中的 self 代表該方法的調(diào)用者,即誰(shuí)調(diào)用該方法,那么 self 就代表誰(shuí)。因此,該程序的運(yùn)行結(jié)果為:

正在執(zhí)行構(gòu)造方法<__main__.Person object at 0x0000021ADD7D21D0> 正在學(xué)Python正在執(zhí)行構(gòu)造方法<__main__.Person object at 0x0000021ADD7D2E48> 正在學(xué)Python

另外,對(duì)于構(gòu)造函數(shù)中的 self 參數(shù),其代表的是當(dāng)前正在初始化的類對(duì)象。舉個(gè)例子:

class Person: name = 'xxx' def __init__(self,name): self.name=name zhangsan = Person('zhangsan')print(zhangsan.name)lisi = Person('lisi')print(lisi.name)

運(yùn)行結(jié)果為:

zhangsanlisi

可以看到,zhangsan 在進(jìn)行初始化時(shí),調(diào)用的構(gòu)造函數(shù)中 self 代表的是 zhangsan;而 lisi 在進(jìn)行初始化時(shí),調(diào)用的構(gòu)造函數(shù)中 self 代表的是 lisi。

值得一提的是,除了類對(duì)象可以直接調(diào)用類方法,還有一種函數(shù)調(diào)用的方式,例如:

class Person: def who(self): print(self)zhangsan = Person()#第一種方式zhangsan.who()#第二種方式who = zhangsan.whowho()#通過(guò) who 變量調(diào)用zhangsan對(duì)象中的 who() 方法

運(yùn)行結(jié)果為:

<__main__.Person object at 0x0000025C26F021D0><__main__.Person object at 0x0000025C26F021D0>

顯然,無(wú)論采用哪種方法,self 所表示的都是實(shí)際調(diào)用該方法的對(duì)象。

總之,無(wú)論是類中的構(gòu)造函數(shù)還是普通的類方法,實(shí)際調(diào)用它們的誰(shuí),則第一個(gè)參數(shù) self 就代表誰(shuí)。

以上就是Python self用法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python self用法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美黄a| 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 伊大人香蕉久久网欧美 | 在线看欧美成人中文字幕视频 | 欧美成人久久久 | 中文字幕一级毛片视频 | 99久久精品免费观看区一 | 极品欧美 | 美国一级毛片a | 欧美日韩国产成人精品 | 国产精品v一区二区三区 | 亚洲国产成人精品激情 | 欧美一级看片 | 人成免费网站 | 亚洲免费美女视频 | 国产精品亚洲欧美日韩久久 | 国产日产高清欧美一区二区三区 | 欧美日本一区二区 | 日韩免费观看一级毛片看看 | 日韩 欧美 自拍 在线 视频 | 国内自拍第五一页 | 久久欧美精品欧美久久欧美 | 一级特级毛片免费 | 一区二区成人国产精品 | 超矿碰人人超人人看 | 中国一级毛片 | 在线国产一区二区 | 人碰人操| 东京一区二区三区高清视频 | 免费一级欧美片片线观看 | 国产成人精品久久一区二区小说 | 日韩欧美一区二区三区不卡在线 | 亚洲成人在线视频播放 | 99国产福利视频区 | 欧美一区二区视频三区 | 99在线观看视频免费 | 欧美成人视 | 美女黄色一级毛片 | 久久色婷婷 | 亚洲国产老鸭窝一区二区三区 | 99视频精品免费99在线 |