pythonself有哪些用法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、洪江網(wǎng)絡(luò)推廣、成都微信小程序、洪江網(wǎng)絡(luò)營(yíng)銷(xiāo)、洪江企業(yè)策劃、洪江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供洪江建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:muchs.cn

今天就跟大家聊聊有關(guān)python self有哪些用法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

對(duì)于在類(lèi)體中定義的實(shí)例方法,Python 會(huì)自動(dòng)綁定方法的第一個(gè)參數(shù)(通常建議將該參數(shù)命名為 self),第一個(gè)參數(shù)總是指向調(diào)用該方法的對(duì)象。根據(jù)第一個(gè)參數(shù)出現(xiàn)位置的不同,第一個(gè)參數(shù)所綁定的對(duì)象略有區(qū)別:

在構(gòu)造方法中引用該構(gòu)造方法正在初始化的對(duì)象。

在普通實(shí)例方法中引用調(diào)用該方法的對(duì)象。

由于實(shí)例方法(包括構(gòu)造方法)的第一個(gè) self 參數(shù)會(huì)自動(dòng)綁定,因此程序在調(diào)用普通實(shí)例方法、構(gòu)造方法時(shí)不需要為第一個(gè)參數(shù)傳值。

self 參數(shù)(自動(dòng)綁定的第一個(gè)參數(shù))大的作用就是引用當(dāng)前方法的調(diào)用者,比如前面介紹的在構(gòu)造方法中通過(guò) self 為該對(duì)象增加實(shí)例變量。也可以在一個(gè)實(shí)例方法中訪問(wèn)該類(lèi)的另一個(gè)實(shí)例方法或變量。假設(shè)定義了一個(gè) Dog 類(lèi),這個(gè) Dog 對(duì)象的 run() 方法需要調(diào)用它的 jump() 方法,此時(shí)就可通過(guò) self 參數(shù)作為 jump() 方法的調(diào)用者。

方法的第一個(gè)參數(shù)所代表的對(duì)象是不確定的,但它的類(lèi)型是確定的,即它所代表的只能是當(dāng)前類(lèi)的實(shí)例;只有當(dāng)這個(gè)方法被調(diào)用時(shí),它所代表的對(duì)象才被確定下來(lái)誰(shuí)在調(diào)用這個(gè)方法,方法的第一個(gè)參數(shù)就代表誰(shuí)。

例如定義如下 Dog 類(lèi):

class Dog:
    # 定義一個(gè)jump()方法
    def jump(self):
        print("正在執(zhí)行jump方法")
    # 定義一個(gè)run()方法,run()方法需要借助jump()方法
    def run(self):
        # 使用self參數(shù)引用調(diào)用run()方法的對(duì)象
        self.jump()
        print("正在執(zhí)行run方法")

上面代碼的 run() 方法中的 self 代表該方法的調(diào)用者:誰(shuí)在調(diào)用 run() 方法,那么 self 就代表誰(shuí)。因此該方法表示:當(dāng)一個(gè) Dog 對(duì)象調(diào)用 run() 方法時(shí),run() 方法需要依賴它自己的 jump() 方法。

當(dāng) Python 對(duì)象的一個(gè)方法調(diào)用另一個(gè)方法時(shí),不可以省略 self。也就是說(shuō),將上面的 run()方法改為如下形式是不正確的:

# 定義一個(gè)run()方法,run()方法需要借助jump()方法
def run():
    #省略self,下面代碼會(huì)報(bào)錯(cuò)
    self.jump()
    print("正在執(zhí)行run方法")

此外,在構(gòu)造方法中,self 參數(shù)(第一個(gè)參數(shù))代表該構(gòu)造方法正在初始化的對(duì)象。例如如下代碼:

class InConstructor :
    def __init__(self) :
        # 在構(gòu)造方法里定義一個(gè)foo變量(局部變量)
        foo = 0
        # 使用self代表該構(gòu)造方法正在初始化的對(duì)象
        # 下面的代碼將會(huì)把該構(gòu)造方法正在初始化的對(duì)象的foo實(shí)例變量設(shè)為6
        self.foo = 6
# 所有使用InConstructor創(chuàng)建的對(duì)象的foo實(shí)例變量將被設(shè)為6
print(InConstructor().foo) # 輸出6

在 InConstructor 的構(gòu)造方法中,self 參數(shù)總是引用該構(gòu)造方法正在初始化的對(duì)象。程序中將正在執(zhí)行初始化的 InConstructor 對(duì)象的 foo 實(shí)例變量設(shè)為 6,這意味著該構(gòu)造方法返回的所有對(duì)象的 foo 實(shí)例變量都等于 6。

需要說(shuō)明的是,自動(dòng)綁定的 self 參數(shù)并不依賴具體的調(diào)用方式,不管是以方法調(diào)用還是以函數(shù)調(diào)用的方式執(zhí)行它,self 參數(shù)一樣可以自動(dòng)綁定。例如如下程序:

class User:
    def test(self):
        print('self參數(shù): ', self)
       
u = User()
# 以方法形式調(diào)用test()方法
u.test() # <__main__.User object at 0x00000000021F8240>
# 將User對(duì)象的test方法賦值給foo變量
foo = u.test
# 通過(guò)foo變量(函數(shù)形式)調(diào)用test()方法。
foo() # <__main__.User object at 0x00000000021F8240>

上面程序中第 5 行代碼以方法形式調(diào)用 User 對(duì)象的 test() 方法,此時(shí)方法調(diào)用者當(dāng)然會(huì)自動(dòng)綁定到方法的第一個(gè)參數(shù)(self 參數(shù));程序中第 11 行代碼以函數(shù)形式調(diào)用 User 對(duì)象的 test() 方法,看上去此時(shí)沒(méi)有調(diào)用者了,但程序依然會(huì)把實(shí)際調(diào)用者綁定到方法的第一個(gè)參數(shù),因此輸出結(jié)果完全相同。

當(dāng) self 參數(shù)作為對(duì)象的默認(rèn)引用時(shí),程序可以像訪問(wèn)普通變量一樣來(lái)訪問(wèn)這個(gè) self 參數(shù),甚至可以把 self 參數(shù)當(dāng)成實(shí)例方法的返回值??聪旅娉绦颍?/p>

class ReturnSelf :
    def grow(self):
        if hasattr(self, 'age'):
            self.age += 1
        else:
            self.age = 1
        # return self返回調(diào)用該方法的對(duì)象
        return self
rs = ReturnSelf()
# 可以連續(xù)調(diào)用同一個(gè)方法
rs.grow().grow().grow()
print("rs的age屬性值是:", rs.age)

從上面程序中可以看出,如果在某個(gè)方法中把 self 參數(shù)作為返回值,則可以多次連續(xù)調(diào)用同一個(gè)方法,從而使得代碼更加簡(jiǎn)潔。但是這種把 self 參數(shù)作為返回值的方法可能會(huì)造成實(shí)際意義的模糊,例如上面的 grow 方法用于表示對(duì)象的生長(zhǎng),即 age 屬性的值加 1,實(shí)際上不應(yīng)該有返回值。

看完上述內(nèi)容,你們對(duì)python self有哪些用法有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)頁(yè)標(biāo)題:pythonself有哪些用法-創(chuàng)新互聯(lián)
URL分享:http://muchs.cn/article42/deihhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)Google、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)