【发布时间】:2021-07-12 01:29:27
【问题描述】:
在下面的代码中,如果在函数 foo 中对名称 v 使用赋值语句,解释器会给出 unboundlocalerror,因为这会在函数范围内创建一个同名变量,我们会在本地赋值之前尝试引用它。但是为什么在实例方法中的实例变量上做同样的事情没有给出任何错误呢? Python评估self.v = self.v + 1和v = v + 1时有什么区别?
class A:
v = 1
def foo(self):
self.v = self.v + 1
v = 1
def foo():
v = v + 1
# UnboundLocalError: local variable 'v' referenced before assignment
foo()
a = A()
# print 1
print(a.v)
a.foo()
# print 1 2
print(a.__class__.v, a.v)
【问题讨论】:
-
因为
self已定义而v未定义。
标签: python variable-assignment