許多python初學(xué)者,在接觸到python面向?qū)ο蟮臅r(shí)候,就被類中包含的方法中的self打敗了,不知道self是何物?
既然寫在方法中,是必須參數(shù),為何在調(diào)用方法的時(shí)候不給它傳參數(shù)還能正常運(yùn)行?和我們前面學(xué)的函數(shù)傳參這塊矛盾么?勇哥在這里給慢慢大家揭開self的神秘面紗。
首先我們看下如下代碼:
改進(jìn)上述代碼,我們來探索下self到底是個(gè)什么東西?大家應(yīng)該記得python中有一個(gè)id()內(nèi)置函數(shù),它可以返回指定變量在內(nèi)存中存放的地址。
Self既然作為show方法的形參,那我就可以在該方法內(nèi)部通過print打印,該形參變量在內(nèi)存中的存放位置;我們?cè)陬愅鈩?chuàng)建的對(duì)象mytest,它其實(shí)也是一個(gè)變量,我也可以通過id函數(shù)打印給變量在內(nèi)存中的存放位置,改進(jìn)后的代碼執(zhí)行結(jié)果如下:
通過上圖,我們發(fā)現(xiàn)對(duì)象mytest變量的存放地址和self的內(nèi)存存放地址竟然是一樣的,這就意味它們代表的是一個(gè)東西,那就是mytest變量本身。當(dāng)系統(tǒng)在執(zhí)行mytest=test()的時(shí)候,python的解釋器會(huì)悄悄的幫我們把mytest實(shí)例變量傳給了self。所以后邊我們?cè)僬{(diào)用該方法的時(shí)候,不需要再給該方法傳參數(shù)了。
另外類中的普通方法參數(shù)self必須寫在最前邊(即最左邊),self參數(shù)本身的名字可以修改,但是不推薦,因?yàn)榇蠹叶技s定叫這個(gè)名字了,所以我們就跟著隨大流好了。對(duì)于接觸過其他編程語言的人來說,python中是self與C++和JAVA中類中的this關(guān)鍵字意義是一樣的。
因此self在方法中是必須(位置)參數(shù)沒錯(cuò),但是在創(chuàng)建對(duì)象或?qū)嵗哪且豢?,python解釋器就幫我們傳遞了當(dāng)前的對(duì)象給self了,所以我們?cè)僬{(diào)用該方法的時(shí)候不需要在傳了。正是因?yàn)榉椒ㄖ杏衧elf,我們就可以在方法中對(duì)這個(gè)實(shí)例的屬性進(jìn)行操作了,記住self參數(shù)指向了當(dāng)前對(duì)象本身。
-
python
+關(guān)注
關(guān)注
55文章
4768瀏覽量
84376
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論