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

为何两段Python类属性打印代码一段报错一段正常?

两段代码运行差异的原因解释

第一段代码报错原因

class person:
  name = "xyz"
  def show(self):
    print(self.name)

a = person
a.show()

这里的a = person只是把类对象本身赋值给了变量a,并没有创建person类的实例。show是定义在类里的实例方法,这类方法的第一个参数self必须接收一个类的实例对象才能正常运行。直接通过类调用这个方法时,Python不会自动传入self参数,所以会抛出TypeError,提示缺少必要的self参数。

第二段代码正常运行的原因

class person:
  def __init__(self, name):
    self.name = name

  def show(self):
    print(self.name)

a = person("xyz")
a.show()

这里的a = person("xyz")是调用类的构造方法,创建了一个person类的实例对象,并把这个实例赋值给a。当通过实例调用show方法时,Python会自动把当前实例(也就是a)作为第一个参数self传递给show方法,所以方法内部能正常通过self.name访问实例的属性,最终输出xyz。

核心区别

  • 第一段没有创建类的实例,直接调用类的实例方法,未传入self参数导致报错。
  • 第二段正确创建了类的实例,通过实例调用方法时Python自动传入self,方法正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:28:12