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

Python中创建class及使用self的作用是什么?是否必须使用?

Python中class与self的作用
  • class是面向对象编程的封装单元,用来把关联的数据(属性)和操作数据的逻辑(方法)打包在一起,方便实现逻辑复用、数据隔离、继承扩展。本质上class相当于一份自定义的“模板”,你可以基于这个模板快速生成多个结构相同、但数据互相独立的实例对象,不用重复写冗余代码。
  • self是类中实例方法的第一个必填参数(这是Python语法的固定规则,self只是全行业通用的命名约定,你愿意叫this或者别的名字也能跑,但不推荐改),它指向的是当前调用这个方法的实例对象本身。当你通过实例调用方法时,Python会自动把当前实例传给这个参数,你才能在方法内部读取、修改当前实例的属性,或者调用实例绑定的其他方法。

你给出的示例代码存在多处语法错误,无法正常运行:

# 原错误代码
class ThisIsClass(self): # 类定义后的括号用来填要继承的父类,不能写self
    def Func(): # 实例方法必须预留第一个参数接收实例引用,否则调用会报参数不匹配错误
        self.var+=1
ThisIsClass() # 没有初始化var属性,就算方法定义正确,执行时也会报属性不存在错误

修正后的可运行示例:

class ThisIsClass:
    # __init__是实例的构造方法,实例化时自动执行,用来初始化实例属性
    def __init__(self, init_val=0):
        self.var = init_val

    def func(self):
        self.var += 1

# 基于类生成两个独立的实例
obj_a = ThisIsClass(init_val=1)
obj_b = ThisIsClass(init_val=10)

obj_a.func()
print(obj_a.var) # 输出2,仅修改obj_a自身的var属性
obj_b.func()
print(obj_b.var) # 输出11,和obj_a的属性完全隔离
开发时是否必须使用class和self?

答案是完全不需要。

  • Python是多范式编程语言,不强制要求用面向对象写法,你完全可以只用函数、普通变量完成所有需求,尤其是写简单的小脚本时,直接写过程式代码反而更简洁高效,没必要硬套class增加无意义的复杂度。
  • 只有当你需要管理多份结构相似、数据独立的状态,或者需要用到继承、多态等特性梳理复杂系统逻辑时,用class封装才是性价比更高的选择。
  • 如果你选择写class里的普通实例方法,就必须给方法留第一个参数接收实例引用(也就是约定的self),这是语法要求;但如果写的是类方法、静态方法,就不需要传self。

同样的计数器逻辑,完全不用class也能实现:

# 函数式写法,不需要class和self
def build_counter(init_val=0):
    val = init_val
    def add_one():
        nonlocal val
        val += 1
        return val
    return add_one

counter1 = build_counter(1)
counter2 = build_counter(10)
print(counter1()) # 输出2
print(counter2()) # 输出11

内容的提问来源于stack exchange,提问作者GamerTronky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:01:41