如何在其他函数中访问局部变量

时间:2019-04-30 11:55:48

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

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

最后,我想问用户他是否想再次玩游戏,但是我不能使用一种方法中使用的变量,因为它们的范围仅限于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:“行侠”对象没有属性“ gamePlay”。

我刚刚开始学习Python并克服了这一困难。

2 个答案:

答案 0 :(得分:0)

如果只是将变量声明上移,就像这样

class Hangman():
    gamePlay = True

与函数局部变量相反,它成为对象的成员。因此,从其所有方法中都可以看到它。

答案 1 :(得分:0)

通过将所有变量移动到类的构造函数__init__上,可以大大简化类,如下所示
还要注意,在类的任何函数中,您可以通过执行x

来访问类self.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