日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python类中init_Python类中的__init__() 和 self 的解析

發(fā)布時(shí)間:2023/12/19 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python类中init_Python类中的__init__() 和 self 的解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、Python中self的含義

self,英文單詞意思很明顯,表示自己,本身。

此處有幾種潛在含義:

1.這里的自己,指的是,實(shí)例Instance本身。

2.同時(shí), 由于說到“自己”這個(gè)詞,都是和相對而言的“其他”而說的;而此處的其他,指的是,類Class,和其他變量,比如局部變量,全局變量等。

此處的self,是個(gè)對象(Object),是當(dāng)前類的實(shí)例。

因此,對應(yīng)的self.valueName 和 self.function()中的valueName:表示self對象,即實(shí)例的變量。與其他的,Class的變量,全局的變量,局部的變量,是相對應(yīng)的。

function:表示是調(diào)用的是self對象,即實(shí)例的函數(shù)。與其他的全局的函數(shù),是相對應(yīng)的。

2、Python中為何要有self

那就是:

在類的代碼(函數(shù))中,需要訪問當(dāng)前的實(shí)例中的變量和函數(shù)的,即,訪問Instance中的:

對應(yīng)的變量(屬性,property):Instance.ProperyNam,去讀取之前的值和寫入新的值

調(diào)用對應(yīng)函數(shù)(function):Instance.function(),即執(zhí)行對應(yīng)的動(dòng)作

-> 而需要訪問實(shí)例的變量和調(diào)用實(shí)例的函數(shù),當(dāng)然需要對應(yīng)的實(shí)例Instance對象本身

-> 而Python中就規(guī)定好了,函數(shù)的第一個(gè)參數(shù),就必須是實(shí)例對象本身,并且建議,約定俗成,把其名字寫為self

-> 所以,我們需要self(需要用到self)

而如果沒有用到self,即代碼中,去掉self后,那種寫法所使用到的變量,實(shí)際上不是你所希望的,不是真正的實(shí)例中的變量和函數(shù),而是的訪問到了其他部分的變量和函數(shù)了。甚至?xí)捎跊]有合適的初始化實(shí)例變量,而導(dǎo)致后續(xù)無法訪問的錯(cuò)誤。

下面,就通過代碼,來演示,如果去掉self,或者沒有合理的使用self,會(huì)出現(xiàn)哪些錯(cuò)誤。

3、首先來看一下__init__()和self對象

可以看出self為實(shí)例變量p,是一個(gè)Person類型的對象。

以下是d =?Dog('LiChuang',"京巴")實(shí)例化的示意圖:

4、如果沒有在__init__中初始化對應(yīng)的實(shí)例變量的話,導(dǎo)致后續(xù)引用實(shí)例變量會(huì)出錯(cuò)

如下代碼,完整的演示了,如果沒有在類Class的最初的__init__函數(shù)中,正確的初始化實(shí)例變量,則會(huì)導(dǎo)致后續(xù)沒有變量可用,因而出現(xiàn)AttributeError的錯(cuò)誤:

從上述代碼可見,由于在類的初始化(實(shí)例化)的__init__函數(shù)中,沒有給self.name設(shè)置值,使得實(shí)例中,根本沒有name這個(gè)變量,導(dǎo)致后續(xù)再去訪問self.name,就會(huì)出現(xiàn)AttributeError的錯(cuò)誤了。

對應(yīng)的,如果寫成self.name,則意思就正確了,就是初始化的時(shí)候,給實(shí)例中新增加,并且正常設(shè)置了正確的值newPersionName了,所以后續(xù)再去通過self.name,就可以訪問到,當(dāng)前實(shí)例中正確的變量name了。

相應(yīng)的正確寫法的代碼如下:

5、在函數(shù)中,使用對應(yīng)的變量,雖然代碼是可以運(yùn)行的,但是實(shí)際上卻是使用的,不是實(shí)例中的變量

有時(shí)候,雖然你寫的代碼,可以運(yùn)行,但是使用到的變量,由于沒有加self,實(shí)際上是用到的不是實(shí)例的變量,而是其他的變量。

此類問題,主要和Python中的變量的作用域有關(guān),但是此處例子中,也和是否使用self有關(guān):

其中,可見,此處開始__init__中,沒有給self實(shí)例初始化對應(yīng)的name,

而后面的函數(shù)sayYourName中,雖然可以調(diào)用到self.name而沒有出現(xiàn)AttributeError錯(cuò)誤,

但是實(shí)際上此處的值,不是所期望的,傳入的name,即"Tim",而是類中的name的值,即"class global name"。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的python类中init_Python类中的__init__() 和 self 的解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。