无法理解Python 3中的类(可能是范围问题)

时间:2014-07-11 01:09:28

标签: python class

我无法理解类及其作用域的工作方式。 这是我现在的代码。

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时,由于某种原因它会保持不变。

1 个答案:

答案 0 :(得分:2)

它没有改变,因为它只在你的班级被初始化时分配了一次

您可以通过多种方式解决这个问题。如果wheatproduction应始终基于wheatfields倍,您可以将其转换为property,以便每次访问时计算出来:

class Player():
   @property
   def wheatProduction(self):
      return self.wheatFields * 10