You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中定义方法时为何要使用self参数?

理解Python中类方法里的self参数作用

首先先指出你代码里的两个小问题,避免运行报错:

  1. Python类名惯例是大驼峰格式(比如Name而非name)
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:13:16