У объекта нет атрибута - Python OOP - PullRequest
0 голосов
/ 29 марта 2020

Это мой код, который я не могу заставить работать. Это говорит о том, что мой объект не имеет атрибута Score, когда я пытаюсь получить очки player1 и player2 с player1.score. Я проверил наличие ошибок в отступах и не смог их найти. Я не уверен, почему счет отсутствует, поскольку я дал ему self. Я ввел объект класса с player1 = Player(PLAYER1, 1, DEFAULT_SETS) с PLAYER1 и DEFAULT_SETS, являющимися переменными, которые я установил в файле настроек. Ошибка в части кода #points в классе Game.

class Game:
    #Init function to start the game variables
    def __init__(self):
        pg.init()
        self.screen = pg.display.set_mode((WIDTH, HEIGHT))
        pg.display.set_caption(TITLE)
        self.clock = pg.time.Clock()
        pg.key.set_repeat(500,100)
        #self.screen_scenario = WELCOME
        self.load_data()
        self.Game_Deuce = False
        self.Game_Tiebreaker = False
        #self.Game_Winner = False
        self.sets = DEFAULT_SETS
        self.serve = random.choice([1,2])

        #Function to start a new game
        def new(self):
            self.paused = False
            self.screen.fill(DARKGREEN)
            player1 = Player(PLAYER1, 1, DEFAULT_SETS)
            player2 = Player(PLAYER2, 0, DEFAULT_SETS)


        #Function to run the scoreboard
        def run(self):
            self.playing = True
            #pg.mixer.music.play(loops=-1)
            #pg.mixer.music.set_volume(BG_MUSIC_VOLUME)
            while self.playing:
                self.dt = self.clock.tick(FPS) / 1000
                self.events()
                if not self.paused:
                    self.update()
                self.draw()


            #Points
            self.draw_text(str(POINTS[player1.score]), self.points_font, 180, YELLOW, POINTS_BOX_X_2, POINTS_BOX_Y_2)
            self.draw_text(str(POINTS[player2.score]), self.points_font, 180, YELLOW, POINTS_BOX_X_1, POINTS_BOX_Y_1)

Это отдельный файл, но он был импортирован правильно:

    class Player:
        def __init__(self, name, serving, sets):
            self.name = name
            sets = sets
            self.score = int(0)
            self.games = int(0)
            self.sets = int(0)
            self.advantage = False
            if serving == 1:
                self.serving = True

1 Ответ

0 голосов
/ 29 марта 2020

@ mathtick "Обязательно перезапустите процесс python для проверки ошибок повторного импорта. Если вы запускаете это как скрипт, это не должно вызывать проблем"

и

@ Matthias "В функции new вы устанавливаете player1 = Player (PLAYER1, 1, DEFAULT_SETS). Player1 является локальным для этой функции, поэтому вы не можете использовать его в запуске функции"

Я добавил себя переменным, на которые Матиас указал и перезапустил Python и исправил их

И ОБНОВЛЕНИЕ / СОВЕТЫ: ​​

Если вы действительно хотите «обмануть» importlib.reload это твоя вражда Я обычно помещаю это в свое Я Python onstart.py:

from importlib import reload

И затем в Я Python Я живу в этом человеке-dev-l oop:

In [29]: import my.lib as m                                                                                                                                                                                        

In [30]: # edit code                                                                                                                                                                                               

In [31]: reload(m)

Имейте в виду, что это не перезагрузит все модули. Если у вас есть другие файлы, вам нужно перезагрузить их тоже в правильном порядке. Используйте стрелки вверх в I Python REPL. Есть библиотеки автозагрузки, но я не верю, что они всегда все делают правильно, и вы будете go злиться. Помните, перезагрузка - хитрый взломщик, не всегда все работает. Используйте его, если хотите обмануть, но перезапустите, если все станет странно. Выжить и повторить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...