名称错误:名称'rank'没有定义,即使我在全局中提到了它



下面的代码是一个更大代码的简化版本。我想执行的主要操作是在inc_progress(self)函数中使用和更改rankprogress

class User:
rank=-8
progress=0
def inc_progress(self):
global rank, progress
rank+=1
print(rank,progress)

u=User()
u.inc_progress()

但它给了我一个错误:NameError: name 'rank' is not defined. Did you mean: 'range'?

有人知道这个问题的可能解决方案吗,这样我就可以在inc_progress(self)函数中使用和更改rankprogress的值

通过在__init__之外定义rankprogress,您已经将它们定义为类变量,这意味着它们属于该类,并且对该类的所有实例都可用。https://pynative.com/python-class-variables/

这里有一个修改后的代码版本,它可以实现你所期望的(可能还有一些你没有做到的!(

class User:
rank=-8
progress=0
def inc_progress(self):
User.rank+=1
print(User.rank, User.progress)
u=User()
u.inc_progress() # Output: -7, 0

好的,太好了!问题解决了,对吧?嗯,也许吧。看看这个。

u=User()
u.inc_progress() # Output: -7, 0
u2 = User()
print(u2.rank, u2.progress) # Output: -7, 0

等等,什么?新创建的User实例的秩为-7,而不是-8!这就是类变量。如果您希望rankprogress特定于实例,则在初始化期间定义它们,并像往常一样使用self访问它们

class User:
def __init__(self):
self.rank=-8
self.progress=0
def inc_progress(self):
self.rank+=1
print(self.rank, self.progress)
u=User()
u.inc_progress() # Output: -7, 0
u2 = User()
print(u2.rank, u2.progress) # Output: -8, 0

相关内容

  • 没有找到相关文章

最新更新