方法内声明的类属性作用域及Python类中实例属性访问范围问询
关于Python类中属性作用域的问题解答
1. 方法内部声明的属性的作用域
得分两种核心情况来理解:
- 如果是方法内的局部变量(比如直接写
count = 5,不带self.前缀):这个变量的作用域严格局限在当前方法内部,方法执行结束后就会被销毁,类的其他方法或者外部代码都访问不到它。 - 如果是实例属性(通过
self.属性名声明,比如self.count = 5):这种属性是绑定到类的实例上的,只要实例没有被销毁,类的所有实例方法(只要方法接收self参数,能访问到实例本身)都可以访问和修改它,甚至在类外部通过实例对象也能直接操作这个属性。
2. 针对给定Python类代码的分析
先提一句,你给出的代码存在几个语法和逻辑问题:
add()方法没有定义self参数,类的实例方法必须把self作为第一个参数,否则运行时会找不到self变量;add()方法里递归调用return add()会触发无限递归,程序运行后会直接栈溢出报错;- 类定义末尾的
return是无效语法,类块内部不能直接写return语句。
回到属性number的作用域:
当test()方法被调用时,self.number = 0是给当前实例绑定了一个名为number的属性,它并不局限于test()方法内部。只要实例存在,类中其他正确定义的实例方法(带self参数的)都可以访问和修改这个self.number。比如把add()方法修正成如下形式:
def add(self): self.number += 1 return self.number
那么在调用test()初始化number之后,调用add()就能正常修改和返回number的值了。
内容的提问来源于stack exchange,提问作者ffriends_
相关产品推荐
相关产品推荐

