在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风格的面向对象代码,实现数据封装与行为绑定