1. 程式人生 > >Python類和方法中的self

Python類和方法中的self

剛開始進入Python的面向物件階段的學習。發現在給類寫方法時必須加上self引數,而方法(函式)塊中的變數(物件)名前有時加了self,有時沒加,常常被此示例程式弄得一頭霧水,於是老實回頭補課。網上關於這個self的解釋、詳解、深入剖析之類的文章數不勝數,可是要麼太簡,要麼太繁,要麼示範不夠直觀,反正是總難得“淺顯易懂”的感覺。

認真摸索一番後,我寫了下面這段測試程式碼,希望對類似我這種理解能力的人有所幫助:

class ABC(object):
    x='x in ABC'
    print('ABC- x:',x)
    
#    self.x='x in ABCself'
#    print(self.x)

    def aa(self,x):
        x='x in aa'
        print('aa - x:',x)
        print('self.x:',self.x)
        print('self is:',self)

t=ABC()
t.aa("")

'''
輸出結果:
ABC- x: x in ABC
aa - x: x in aa
self.x: x in ABC
self is: <__main__.ABC object at 0x0334F290>
'''

我的理解是,self指向於類本身,寫方法時加上self引數,表示構造一個只屬於這個類的方法,呼叫類方法後,selft指代的就是這個類建立的例項物件。

因此,在方法塊中的某變數(如例中的x)前加上字首“self.”,表示引用這個類(例中的ABC)的某屬性,如果類程式碼中沒有該屬性,就會報錯(比如本例中如果沒有 x='x in ABC' ,就會報:AttributeError: 'ABC' object has no attribute 'x')。

另外,類本身是沒有self的概念,如果寫類本級程式碼時加字首self,self被視作一個名為self的普通屬性處理,執行時會報錯,提示self未定義(NameError: name 'self' is not defined)。