Python類和方法中的self
阿新 • • 發佈:2018-12-22
剛開始進入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)。