@Leeroy91

Как правильно обращаться к переменной класса из другого класса?

Доброго времени суток!
Примерно с 2 недели назад начал изучать Python, до этого был не большой опыт программирования. Получил интересное задание от товарища, вопрос будет как раз по нему (введение дабы сразу не кидались палками :) )

Вопрос состоит в следующем:
Как мне обратиться к двум переменным, а именно twist_num и choice_num (сравнение для дальнейшей работы с балансом)?

Пробовал через сеттер, ничего не вышло, в коде ниже попытался задействовать прямое обращение...
Вроде как сама IDE обращение видит и понимание, но при дальнейшей проверки кода в консоли = ноль реакции..

Сам код:
from random import randint

class Balance(object):

    def __init__(self):
        self.money()
        self.input_bet()

    def run(self):
        self.input_bet = None

    def input_bet(self):

            input_bet = input('Ваша ставка: \n')

            try:
                input_bet = int(input_bet)
                self.input_bet = input_bet
            except Exception:
                print('Не число')


    def money(self) -> None:
        money = 10000
        print("Ваш баланс:" + str(money))

#----------------------------------------------------------------------------------------
class Roulette(object):

    def __init__(self):
        self.__choice_num = None
        self.__twist_num = None

    def run(self):
        while True:
            self.input_number()
            self.twist_roulette()
            self.check_choice_num()

    def input_number(self) -> None:

        is_num = False
        while not is_num:
            number = input('Введите целое число от 0 до 36 \n')

            try:
                number = int(number)
                is_num = True
                self.choice_num = number
            except Exception:
                print('Опаньки...Что-то ты сделал не так...\n')

    def twist_roulette(self) -> None:
        self.twist_num = randint(0,1)

    def check_choice_num(self) -> None:
        if self.choice_num == self.twist_num:
            print('Ты победил: выпало число ' + str(self.twist_num))
            return

        print('Ты проиграл: выпало число ' + str(self.twist_num))
#----------------------------------------------------------------------------------------
class Game:
    def __init__(self):
        self.roulette = Roulette()
        self.balance = Balance()

    def run(self):
        self.game_lose()
        self.game_won()

    def game_won(self):
        if roulette.choice_num == roulette.twist_num:
            print('You won!')


balance = Balance()
balance.run()
roulette = Roulette()
roulette.run()
game = Game()
game.run()
  • Вопрос задан
  • 2057 просмотров
Решения вопроса 1
@bbkmzzzz
def game_won(self):
       # if roulette.choice_num == roulette.twist_num: # а что такое roulette? такого имени в текущем пространстве имен нет
         if self.roulette.choice_num == self.roulette.twist_num: # обращаемся к именам в пространстве экземпляра.
            print('You won!')


Так как Roulette.twist_num не определен в __init__, то пока не выполнится метод, в котором определяется это имя - будут ошибки. -> все поля класса экземпляра инициализируем в __init__ хотя бы тем же None.

---------

except Exception:
                print('Опаньки...Что-то ты сделал не так...\n')


Перехват всего без остановки - не надо так. Ловим только определенные исключения, даем остальным даем свалить программу, проще будет в отладке и понимании, что же именно пошло не так. Смотрим на конструкцию
except Exception as variable_name_here:
    ...
    raise variable_name_here


----

def input_bet(self): # можно сильно упростить
            try:
                self.input_bet = int(input('Ваша ставка: \n'))
            except Exception:
                print('Не число')
                self.input_bet = None # в случае проблемы - устанавливаем дефолтное значение. Как только появится основной цикл - проблема вылезет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы