Python类中定义方法时为何要使用self参数?
理解Python中类方法里的self参数作用
首先先指出你代码里的两个小问题,避免运行报错:
- Python类名惯例是大驼峰格式(比如
Name而非name) method_1里你把参数写成Def,但赋值时用了DEF,这会触发未定义变量的错误,建议用更清晰的变量名比如def_val
接下来解释self的核心作用:
- 它是当前类实例的引用:当你创建类的实例(比如
obj = Name()),调用obj.method_1("test")时,Python会自动把obj这个实例作为第一个参数传给方法里的self。简单说,self就是你正在操作的那个具体对象。 - 用来绑定和访问实例属性:类的每个实例都可以有自己的属性,
self.属性名就是把值绑定到当前实例上。比如你代码里self.def_val = def_val,就是把方法参数的值存到这个实例的def_val属性里,后续method_2通过self.def_val就能取出这个实例专属的值——换个实例存不同的值,彼此不会干扰。 - 区分局部变量和实例属性:如果不用
self,method_1里的def_val只是方法内部的局部变量,方法执行完就消失了,其他方法根本访问不到。加了self才是把值存在实例上,成为实例的“持久化”属性。
修正后的可运行代码:
class Name: def method_1(self, def_val): self.def_val = def_val def method_2(self): return self.def_val
举个实际使用的例子:
# 创建第一个实例 obj1 = Name() obj1.method_1("我是实例1的属性") print(obj1.method_2()) # 输出:我是实例1的属性 # 创建第二个实例 obj2 = Name() obj2.method_1("我是实例2的属性") print(obj2.method_2()) # 输出:我是实例2的属性
可以看到两个实例的属性是完全独立的,这就是self在其中起到的关键作用——让方法知道自己要操作哪个具体的实例。
内容的提问来源于stack exchange,提问作者Bharadwaj Karthikeya
相关产品推荐
相关产品推荐

