Как получить доступ к локальной переменной в другой функции - PullRequest
0 голосов
/ 30 апреля 2019

Я создал игру «Палач», в которой компьютер выбирает случайное слово, которое пользователь должен угадать слово, буква за буквой.

В конце я хотел спросить пользователя, хочет ли он снова играть в игру, однако я не могу использовать переменные, используемые в одном методе, поскольку их область действия ограничена только одной функцией в 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 и столкнулся с этой трудностью.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Вы можете значительно упростить свой класс, переместив все переменные в конструктор класса, __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 голосов
/ 30 апреля 2019

Если вы просто перемещаете объявление переменной вверх, например

class Hangman():
    gamePlay = True

, оно становится членом объекта, а не локальной переменной для функции.Таким образом, он виден изнутри всех своих методов.

...