【问题标题】:How to access a local variable in a different function如何在不同的函数中访问局部变量
【发布时间】:2019-04-30 11:55:48
【问题描述】:

我创建了一个“刽子手”游戏,其中计算机随机选择一个单词,用户必须逐个字母地猜测该单词。

最后,我想问用户是否想再次玩游戏,但是我不能使用一种方法中使用的变量,因为它们的范围仅限于python中的一个函数。

class Hangman():
    def start(self):
        y = []
        blanks = []
        guessed = []
        repeat = []
        self.gamePlay = True

    def beginning(self):
        while l.gamePlay == True:
            l.start()

            ask = input('Would you like to play again(Y or N): ')
        if ask.upper() == 'Y':
        pass
        else:
            l.gamePlay = False

l = Hangman()
l.beginning()

我想知道如何扩展变量“gamePlay”的范围,使其即使在 begin() 函数中也能正常工作。

目前,它显示:AttributeError: 'Hangman' object has no attribute 'gamePlay'。

我刚开始学习 Python,遇到了这个困难。

【问题讨论】:

  • l.gamePlay全部改成self.gamePlay(其实就是把l.全部改成self.
  • beginning是Hangman的成员函数,它获取实例作为“self”变量。

标签: python-3.x class object instance self


【解决方案1】:

您可以通过将所有变量移动到类的构造函数__init__ 来大大简化您的类,如下所示
另请注意,在您的类的任何函数中,您可以通过 self.x 访问类 x 的属性

class Hangman():

    def __init__(self):

        self.y = []
        self.blanks = []
        self.guessed = []
        self.repeat = []
        self.gameplay = True

    def beginning(self):
        while self.gameplay == True:
            ask = input('Would you like to play again(Y or N): ')
            if ask.upper() == 'Y':
                pass
            else:
                self.gameplay = False

然后当你运行你的代码如下。

hm = Hangman()
hm.beginning()

可以观察输出如下:

Would you like to play again(Y or N): Y
Would you like to play again(Y or N): Y
Would you like to play again(Y or N): Y
Would you like to play again(Y or N): N

【讨论】:

    【解决方案2】:

    如果你只是将变量声明向上移动,像这样

    class Hangman():
        gamePlay = True
    

    它成为对象的成员,而不是函数的局部变量。因此,它在其所有方法中都是可见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多