Я привык к PHP, где глобальная переменная будет доступна для всего проекта, и включение / требование файла PHP во многом похоже на "внедрение" его строк кода на этом месте: все это будет «восприниматься» как один файл, и все переменные будут инстинктивно доступны.
Python работает по-другому, и я хотел бы ознакомиться с передовой практикой, чтобы сделать большой проект более управляемым разделив его на файлы ...
Итак, допустим, у меня есть файл с именем configs.py, который выглядит примерно так:
FRAME_DURATION = int(1000 / 25)
SCREEN_SIZE = 500
LIGHT_GREY = (190,190,190)
RED = (255,0,0)
GREEN = (0,255,0)
YELLOW = (255,255,0)
#etc...
Затем в файле Main.py я могу сделать что-то вроде :
import pygame
from configs import *
pygame.init()
SCREEN = pygame.display.set_mode((SCREEN_SIZE, SCREEN_SIZE),1)
SCREEN.fill(LIGHT_GREY)
run = True
while run:
pygame.time.delay(FRAME_DURATION )
#HERE I'M SUPPOSED TO CHECK THE KEYBOARD AND MOUSE EVENTS
pygame.display.update()
pygame.quit()
И это прекрасно работает, так как мы работаем только с переменными. Но если я хочу сделать слушатель события в другом отдельном файле, я сталкиваюсь с некоторыми «неприятностями». Допустим, я хочу файл со всеми моими функциями. Я назову его actions.py, и он содержит следующую функцию:
def checkEvents():
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
run = False
if event.key == pygame.K_r:
pass
Если я хочу иметь возможность вызывать функцию checkEvents () внутри файла main.py, я получаю NameError, поскольку он не ' t распознает модуль pygame внутри файла actions.py.
Кажется, я не могу заставить его работать: если я импортирую его в оба файла (что, как я знаю, является оптимальным вариантом), игра запускается, но ключи и ключ выхода не делает ничего. Я полагаю, функция checkEvents () прослушивает другой экземпляр pygame?
В любом случае, я хотел бы знать, есть ли способ сделать модули «глобально доступными» ... Импортировать их один раз в основной файл и использовать его во всем проекте, в том числе внутри других импортированных пользовательских модулей?
Окончательный результат должен выглядеть примерно так:
import pygame
from configs import *
import actions
pygame.init()
SCREEN = pygame.display.set_mode((SCREEN_SIZE, SCREEN_SIZE),1)
SCREEN.fill(LIGHT_GREY)
run = True
while run:
pygame.time.delay(FRAME_DURATION )
actions.checkEvents()
pygame.display.update()
pygame.quit()