您的“關注”和“點贊”,是信任,是認可,是支持,是動力…
如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。
文章目錄
1 self
參數概述
Python 中的方法(構造方法或實例方法)至少要包含一個參數,並且方法的第一個參數通常被命名爲 self
。
但是要注意,不遵循此約定會使得你的代碼對其他 Python 程序員來說缺乏可讀性。
舉例如下所示:
class User:
# 構造方法
def __init__(self):
print('執行的是構造方法。')
# 實例方法
def id(self, user_id):
print('已添加 id 爲:', user_id, '的用戶。')
2 self
參數的具體作用
2.1 實例方法中的 self
參數
在 Python 中,同一個類是可以產生多個對象的,那麼當某個對象調用類方法時,該對象就會把自身的引用作爲第一個參數自動傳給該方法。
可以這麼理解,Python 會自動綁定類方法的第一個參數指向調用該方法的對象。
如此,Python 解釋器就能知道到底要操作哪個對象的方法了。
所以,程序在調用實例方法和構造方法時,不需要手動爲第一個參數傳值。
舉例說明,如下所示:
class User:
# 構造方法
def __init__(self):
print('執行的是構造方法。')
# 實例方法
def add_id(self, user_id):
print(self, '添加用戶id的實例方法') # 打印第一個參數 self,不同對象調用,值會不同
# add_id() 方法中第一個參數 self 代表該方法的調用者,即哪個對象調用該方法,那麼 self 就代表哪個對象
user1 = User() # 創建 User 類的第一個 user1 對象
user1.add_id('001') # add_id() 方法中第一個參數 self 代表 user1 對象
user2 = User() # 創建 User 類的第二個 user2 對象
user2.add_id('002') # add_id() 方法中第一個參數 self 代表 user2 對象
運行結果:
執行的是構造方法。
<__main__.User object at 0x000002B0E85A7400> 添加用戶id的實例方法
執行的是構造方法。
<__main__.User object at 0x000002B0E85E5EE0> 添加用戶id的實例方法
2.2 構造方法中的 self
參數
對於構造函數中的 self
參數,其代表的是當前正在初始化的類對象。
舉例如下所示:
class User:
# 構造方法中的 self 參數,其代表的是當前正在初始化的類對象。
def __init__(self):
print(self, '執行的是構造方法。')
user1 = User() # 構造方法中的第一個參數 self 代表的對象是 user1
user2 = User() # 構造方法中的第一個參數 self 代表的對象是 user2
運行結果:
<__main__.User object at 0x000001B73B437400> 執行的是構造方法。
<__main__.User object at 0x000001B73B4225E0> 執行的是構造方法。
3 通過調用類的實例方法進行驗證 self 參數
3.1 類對象直接調用類的實例方法
舉例如下所示:
class User:
# 構造方法在類的實例化過程中執行
def __init__(self):
print('執行的是構造方法。')
# 實例方法
def add_id(self):
print(self, '添加用戶id的實例方法')
user1 = User() # 類的實例化
user1.add_id() # 類對象調用類的實例方法
運行結果:
執行的是構造方法。
<__main__.User object at 0x00000144B63E7400> 添加用戶id的實例方法
3.2 通過某個變量調用類的實例方法
class User:
# 構造方法在類的實例化過程中執行
def __init__(self):
print('執行的是構造方法。')
# 實例方法
def add_id(self):
print(self, '添加用戶id的實例方法')
user1 = User() # 類的實例化
add_id = user1.add_id # 把 user1.add_id 賦值給 add_id 變量
add_id() # 通過 add_id 變量調用 user1 對象中的 add_id() 方法
運行結果:
執行的是構造方法。
<__main__.User object at 0x00000183252F7400> 添加用戶id的實例方法
3.3 小結
無論採用類對象直接調用類的實例方法,還是通過某個變量調用類的實例方法,self
所表示的都是實際調用該方法的對象。
於是乎,無論是類中的構造函數還是普通的類方法,實際調用它們的對象是哪個,則第一個參數 self
就代表哪個。