Python类中self的正确使用场景:AA与BB类实例对比问询
类方法中self的使用问题解答
两种写法本身都没有语法错误,但适用场景完全不同,不能直接判定谁对谁错:
- 类AA的写法:把
z定义成了实例的属性。调用foo()方法后,这个实例可以直接访问obj.z,比如:
如果后续需要在其他方法或者实例外部复用obj = AA(2, 3) obj.foo() print(obj.z) # 输出5z这个计算结果,这种写法是合理的。 - 类BB的写法:
z是foo()方法内部的局部变量,只有在方法执行期间存在,方法结束后就会被销毁,实例外部或其他方法无法访问它。如果z只是方法内临时使用的中间值,这种写法更合适,不会额外占用实例的属性空间。
何时该用self,何时不该用?
- 必须用self的场景:
- 要访问或定义实例的持久属性时,比如示例里的
self.a、self.b,或者AA里需要保留的self.z——这些值会和实例绑定,只要实例存在就能被访问。 - 要调用实例的其他方法时,比如在某个方法里调用
self.another_method()。
- 要访问或定义实例的持久属性时,比如示例里的
- 不需要用self的场景:
- 变量只是方法内部的临时中间值,不需要在方法执行结束后保留,也不需要被其他方法/外部访问,直接作为局部变量定义即可,比如BB里的
z。
- 变量只是方法内部的临时中间值,不需要在方法执行结束后保留,也不需要被其他方法/外部访问,直接作为局部变量定义即可,比如BB里的
内容的提问来源于stack exchange,提问作者user2238328
相关产品推荐
相关产品推荐

