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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:05:20