我无法理解类及其作用域的工作方式。 这是我现在的代码。
class Player():
def __init__(self):
self.wheatFields = 1 #line 3
self.wheatProduction = self.wheatFields * 10 #line 4
player = Player()
def main(player):
print('Wheat fields: ' +str(player.wheatFields))
print('Production: ' +str(player.wheatProduction))
print('What do you want to do?\n1) Add wheat field')
if input() == '1':
player.wheatFields += 1
现在我知道这是错的,但如果有人能解释我错的原因,但我想知道原因。
在第3和第4行,他们声明了变量wheatFields和wheatProduction。这意味着我可以使用player.wheatFields和player.wheatProduction来调用它们。在第11行,它表示将wheatFields增加1。此变量是否成功更改并保存在主菜单上?如果wheatProduction变量等于wheatFields * 10,它怎么会改变?
是因为它在初始化程序中并且只运行一次吗? 如果是这种情况,我怎样才能在每次向玩家添加麦田时将其更新到哪里?
我也试过这样做,但它说没有定义变量。
class Player():
def __init__(self):
self.wheatFields = 1
wheatProduction = wheatFields * 10
这告诉我没有定义wheatFields,但它只是在它上面的行中。
编辑: 谢谢你,dm03514,但我还是遇到了麻烦。你的意思是有道理的,我不明白为什么这不起作用。
class Player():
def __init__(self):
self.wheatFields = 1
self.wheatProduction = self.wheatFields * 10
def wheatProduction(self):
return self.wheatFields * 10
player = Player()
def main(player):
print('Wheat fields: ' +str(player.wheatFields))
print('Production: ' + str(player.wheatProduction))
print('What do you want to do?\n1) Add wheat field')
if input() == '1':
player.wheatFields += 1
while 1:
main(player)
这仍然会导致麦田上升,但是当我调用player.wheatProduction时,由于某种原因它会保持不变。
答案 0 :(得分:2)
它没有改变,因为它只在你的班级被初始化时分配了一次
您可以通过多种方式解决这个问题。如果wheatproduction
应始终基于wheatfields
倍,您可以将其转换为property,以便每次访问时计算出来:
class Player():
@property
def wheatProduction(self):
return self.wheatFields * 10