为何两段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
相关产品推荐
相关产品推荐

