此代码
def reportRealDiagnostics():
ranks = 0
class Rank:
def __init__(self):
global ranks
ranks += 1
rank = Rank()
reportRealDiagnostics()
产生
NameError: global name 'ranks' is not defined
我确信这就是你回答这个问题所需的全部内容。
答案 0 :(得分:3)
当您使用global ranks
时,它会在全局范围内查找ranks
而不是在封闭范围内,因此您会收到该错误。您定义的ranks
是封闭范围的一部分。
在Python3中,此问题已得到解决,您可以使用ranks
关键字修改nonlocal
:
def reportRealDiagnostics():
ranks = 0
class Rank:
def __init__(self):
nonlocal ranks
ranks += 1
rank = Rank()
reportRealDiagnostics()
在Python2中,您可以将其定义为函数属性:
def reportRealDiagnostics():
class Rank:
def __init__(self):
reportRealDiagnostics.ranks += 1
rank = Rank()
reportRealDiagnostics.ranks = 0
reportRealDiagnostics()
还有其他一些选择:nonlocal
keyword in Python 2.x
答案 1 :(得分:0)
您应该将变量用作非本地:
nonlocal ranks