在Python面向對象編程中,self
是一個指向類實例自身的引用參數:
?1. 本質與作用?
- ?身份標識?:
self
是類實例化后對象的"身份證",代表當前實例本身,用于區分不同實例的屬性和方法? - ?自動傳遞?:調用實例方法時,Python會自動將實例作為第一個參數(即
self
)傳入,無需手動傳遞? - ?命名約定?:
self
僅為約定俗成的名稱,可替換為其他標識符(如this
),但不符合代碼規范?
?2. 核心使用場景?
?(1) 訪問實例屬性?
class Person:
def __init__(self, name):
self.name = name? # 通過self綁定實例屬性
- 未使用
self
的變量會成為局部變量,方法執行后即銷毀?
?(2) 調用實例方法?
class Calculator:
def add(self, a, b):
return a + b
def compute(self, x, y):
return self.add(x, y)? # 通過self調用其他方法
- 若省略
self
,Python會誤判為調用全局函數?
?(3) 動態管理屬性?
class Dynamic:
def set_attr(self, key, value):
setattr(self, key, value)? # 動態添加/修改屬性
?3. 特殊注意事項?
- ?構造方法?:
__init__
中的self
指向新創建的實例,用于初始化屬性? - ?類方法?:類方法(
@classmethod
)使用cls
替代self
,表示類本身而非實例? - ?常見錯誤?:
- 忘記聲明
self
參數導致TypeError
? - 在靜態方法(
@staticmethod
)中誤用self
?
- 忘記聲明
?4. 設計哲學?
- ?明確性?:通過
self
顯式區分實例變量與局部變量,避免命名沖突? - ?鏈式調用?:返回
self
可實現方法鏈式調用(如obj.method1().method2()
)?
通過合理使用self
,可以構建符合Pythonic風格的面向對象代碼,實現數據封裝與行為綁定?