类中变量是否都需以self.或class.开头?方法内中间变量需加self.吗?
Python类中变量的self.前缀问题
核心结论
- 类中的变量不是必须都以self.或class.开头,要根据变量的作用范围来决定:
- 实例变量:需要在多个实例方法之间共享,或者允许通过实例对象外部访问的变量,必须用
self.开头,每个实例会独立持有一份。 - 类变量:所有实例共享的变量,定义在类体中(不用前缀)或者用
class.前缀调用。 - 方法局部变量:仅在当前方法内部辅助计算、不会被其他方法或外部访问的中间变量,完全不需要加
self.,直接定义成普通局部变量即可。
- 实例变量:需要在多个实例方法之间共享,或者允许通过实例对象外部访问的变量,必须用
针对你给出的代码示例
你代码里的self.z完全可以改成普通的z,因为它只是add方法里临时存储计算结果的中间值,之后直接返回,不需要在方法外或者其他实例方法中访问。修改后的代码更合理:
class apples: def __init__(self, x, y): self.x = x self.y = y def add(self): z = str(self.x + self.y) + " apples" return z # 注意原代码中foo绑定的是方法对象,需要加()调用才能得到结果 foo = apples(3, 5).add()
额外提醒
只有当某个变量需要被当前实例的其他方法调用,或者允许外部通过实例名.变量名的方式访问时,才需要用self.将其声明为实例变量。用局部变量存储临时中间值,不仅不会占用实例的内存空间(局部变量在方法执行结束后会被销毁),还能更好地封装内部逻辑,避免不必要的外部访问。
内容的提问来源于stack exchange,提问作者Jordan Kizer
相关产品推荐
相关产品推荐

