Должен ли я использовать класс в качестве контейнера для глобальной переменной - PullRequest
5 голосов
/ 08 сентября 2011

Я делал простую игру в Pygame и понял, что мне нужно множество маркеров, счетчиков и всевозможных международных сотрудников.Поэтому я решил определить класс и использовать его следующим образом:

class Staff():
    def __init__(self):
        self.modes={'menu':True,'spawning':False,'sprite_change':False}
        self.timer=pygame.time.Clock()
        self.tick_count=0

, и в моем игровом цикле я просто даю одну переменную для всех своих функций:

def main_loop():
    staff=Staff()
    while not done:
        update_positions(staff)
        clear_background(staff)
        draw_sprites(staff)

Я знаю этот методработает и довольно удобно (для меня), но мне интересно, как это повлияет на скорость моей игры, может быть, я делаю что-то ужасное?Большое спасибо за ответ.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Пожалуйста, сделайте себе одолжение и переосмыслите свой дизайн.

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

Хорошим местом для ваших "глобальных" переменных может быть, например, основной класс или функция. Где все это начинается. Я предполагаю, что есть цикл, в котором некоторые вещи будут повторяться постоянно. оттуда вы можете передать его определенным классам или функциям. Я не знаю вашу архитектуру, но редко бывает полезно иметь глобальные переменные вообще.

1 голос
/ 08 сентября 2011

Хотя я вообще не знаю python, глобальные перемены вообще плохая идея.Я предлагаю образец Синглтона.Хотя это и не лучшая идея, но, безусловно, лучше, чем глобальные: Python и шаблон Singleton

Кроме этого, ваш подход мне подходит.

...