亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python里self有什么用

發布時間:2020-11-23 11:18:10 來源:億速云 閱讀:170 作者:小新 欄目:編程語言

了解python里self有什么用?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

首先我們要搞明白Python的類中為要什么要用到self這個單詞呢,為什么不用"zhangsan"、"lisi"這樣的名字呢,這可定有他的用意。查Google翻譯解釋:

self
名詞的解釋:自;自我;自己

那么問題來了,這里的自己指代的到底是誰,下面聽我詳細分解。

分析

測試代碼以一下這個代碼及其它的擴充為基礎,先貼代碼,為了好理解,別說了半天不知道我在說什么。

class A():
    def song(one):
        print(one)
    def sing(self,one):
        print(one)

1、首先要搞清楚的一個問題 a=A()與a=A,這兩個賦值之間的區別

a=A()
print(a)
a=A
print(a)
print(A)
結果如下:
<__main__.A object at 0x0000020A69C81780>
<class '__main__.A'>
<class '__main__.A'>
分析:
a=A()  是有地址的,這說明他是一個實體,比如 int a  中的 a 一樣
a=A    是沒有地址的,發現他和A打印的結果一毛一樣,這說明他就是A,也就是一個類名,
等價于上一句中 int a 中的 int       
那么也就是說下面這兩語句是等價的
b=A()   與   b=a()
------------------------------------------------------------------------
通過上面的分析,我們知道,a=A()相當于把 A 給實例化了,什么叫實例化呢,類比與 int a ,
int 什么都不能做,即 int 不能被賦值,不能進行算術操作等等,但是 a 可以(其實這里的 A 與 int
是一樣的,追溯到C語言,類只不過是一種自定義的結構變量而已,只不過功能更加強大)。
那具體怎么個實例發呢?

2、self 到底指代的是誰

class A():
    def song(one):
        print(one)
    def sing(self,one):
        print(one)
a=A()
A.sing(a,"hello")  #注意這條語句
a.sing("hello")
打印結果:
hello
hello
-------------------------------
A.sing("hello")
錯誤信息:
TypeError: sing() missing 1 required positional argument: 'one'
提示沒有給 one 賦值
--------------------------------
a.song("hello")
錯誤信息:
TypeError: song() takes 1 positional argument but 2 were given
那么問題來了,多給了一個什么參數,為什么會多給呢?
--------------------------------
把類A改一下
class A():
    def song(one,two):   #注意這里多給song了一個參數
        print(one)
a.song("hello")   //這里的參數  "hello"賦給了 two
print(a)
打印結果:
<__main__.A object at 0x0000020A69C39CC0>
<__main__.A object at 0x0000020A69C39CC0>
是不是很奇怪,為什么a.song("hello")返回的是  實例  a  的地址呢?

從這個例子中你就可以發現,實際上 a.sing(“hello”) 等價于 A.sing(a,“hello”),而self就是實例 a 自己,而且你發現 self ,也可以用別的單詞來代替。

通過這段分析,我們簡單的知道了,類中的方法第一個參數必須是 self ,不然實例無法正確調用類中的方法,也就是說,如果方法中第一個參數不是 self(廣義的),那么這個方法是沒有任何價值的,因為實例無法調用它,一個無法被調用的方法真不知道有什么用。

參數前面的 self

x=6
class A():
    def sing(self):
        self.x=10
    def mutl(self):
        y=10*x
        print(y)
a=A()  
a.mutl()

這里先猜一下結果,到底會打印 60 呢,還是 100 呢?要弄清這個問題,就要先弄清 mutl() 中的 x 到底是哪一個,先看結果在分析。

結果是:60

為什么不調用類內部的 x 參數而跑去調用類外的 x 呢?還是那個問題,self 到底指代的是誰,self 就是 a 本身,那么問題就很明顯了,mutl() 方法中的 x 前面沒有加 self 所以他調用的不是實例(注意這里說的是實例,而不是類)自身的參數。

到這里我想你大概明白了,參數前面有self和沒self的區別了,簡單說,帶self的參數是人家實例自身的,不帶self的,愛誰誰,實例不管。

感謝各位的閱讀!看完上述內容,你們對python里self有什么用大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆子县| 神木县| 集安市| 凤台县| 建瓯市| 石楼县| 平罗县| 宁乡县| 保亭| 灵宝市| 新竹县| 焉耆| 闵行区| 乌恰县| 偏关县| 吉安市| 米易县| 砚山县| 晋城| 磴口县| 抚顺县| 高淳县| 亳州市| 崇义县| 常熟市| 锡林浩特市| 甘泉县| 惠东县| 遂昌县| 双江| 旺苍县| 鄢陵县| 维西| 汉源县| 瑞金市| 连平县| 永靖县| 铅山县| 龙陵县| 宝清县| 黄平县|