1. 程式人生 > >Python self引數 & 函式詳解

Python self引數 & 函式詳解

一、self引數

在Python中,類的方法與普通的函式有一個特別的區別——它們必須有一個額外的第一個引數名稱,但是在呼叫這個方法的時候你不為這個引數賦值,Python會提供這個值。這個特別的變數指物件本身,按照慣例它的名稱是self。
雖然你可以給這個引數任何名稱,但是強烈建議你使用self這個名稱——其他名稱都是不贊成你使用的。
使用一個標準的名稱有很多優點——你的程式讀者可以迅速識別它,如果使用self的話,還有些IDE(整合開發環境)也可以幫助你。
給C++/Java/C#程式設計師的註釋Python中的self等價於C++中的self指標和Java、C#中的this參考。
這裡寫圖片描述

宣告add()方法時,若不加self,則提示
TypeError: add() takes exactly 2 arguments (3 given)
File “D:\PythonWorkplace\PythonDemo\Tet.py”, line 15, in
test.add(1,3)

二、函式型別

靜態函式,類函式,成員函式
靜態函式(@staticmethod): 即靜態方法,主要處理與這個類的邏輯關聯, 如驗證資料;
類函式(@classmethod):即類方法, 更關注於從類中呼叫方法, 而不是在例項中呼叫方法, 如構造過載;
成員函式: 例項的方法, 只能通過例項進行呼叫;

class Person:
grade=1
def init(self,name):
self.name = name

def sayHi(self):#加 self 區別於普通函式
print ‘Hello, your name is?’,self.name

宣告靜態,去掉則編譯報錯;還有靜態方法不能訪問類變數和例項變數
好處:不需要定義例項即可使用這個方法。另外,多個例項共享此靜態方法。

@staticmethod
def sayName():#使用了靜態方法,則不能再使用 self
print “my name is king”#,grade,#self.name

類方法:一個類方法就可以通過類或它的例項來呼叫的方法, > # 不管你是用類來呼叫這個方法還是類例項呼叫這個方法,該方法的第一個引數總是定義該方法的類物件。

@classmethod
def classMethod(cls):
print(“class method”)