如何在不同的函数中访问局部变量

问题描述 投票:0回答:2

我创建了一个“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:'Hangman'对象没有属性'gamePlay'。

我刚开始学习Python并且已经遇到了这个困难。

python-3.x class object instance self
2个回答
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

0
投票

如果您只是移动变量声明,就像这样

class Hangman():
    gamePlay = True

它成为对象的成员,而不是函数的本地变量。因此,从所有方法中都可以看到它。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.