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