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