Python OOP中self使用疑问:两种属性调用写法的区别
Python OOP中两种变量写法的区别
1. 直接写m1 + m2 + m3的场景
这种写法里的m1、m2、m3是局部变量,满足以下情况之一就能直接使用:
- 它们是当前方法的参数,比如:
def tong_diem(self, m1, m2, m3): return m1 + m2 + m3
这里的m1是调用方法时传入的参数,属于方法内部的局部变量,直接使用即可。
- 它们是方法内部临时定义的变量,比如:
def tinh_tong(self): m1 = 85 m2 = 90 m3 = 78 tong_diem = m1 + m2 + m3 return tong_diem
这类变量只在当前方法执行期间存在,方法结束后就会被销毁。
2. 写self.m1 + self.m2 + self.m3的场景
这里的self.m1是实例属性,绑定在类的实例对象上:
- 通常在类的
__init__方法中初始化,比如:
class HocSinh: def __init__(self, m1, m2, m3): self.m1 = m1 # 实例属性 self.m2 = m2 self.m3 = m3 def tinh_tong(self): tong_diem = self.m1 + self.m2 + self.m3 return tong_diem
实例属性属于整个实例,只要实例没被销毁,所有类的方法都能通过self.访问它,甚至可以在类外部通过实例对象直接访问(比如hs = HocSinh(80,90,70); print(hs.m1))。
核心区别
- 作用域:局部变量仅在定义它的方法内有效;实例属性属于整个实例,所有方法都能访问。
- 生命周期:局部变量随方法执行结束而销毁;实例属性在实例被回收前一直存在。
- 访问方式:局部变量直接用变量名;实例属性必须通过
self.(或实例对象名)访问,否则Python会将其视为未定义的局部变量。
内容的提问来源于stack exchange,提问作者Mạnh Hồ Đăng
相关产品推荐
相关产品推荐

