#python #game-engine
Вопрос:
Я начинаю путаться с импортом в python. Похоже, у меня проблема с циклическим импортом, но я не уверен, как правильно решить эту проблему. Пример:
файл1:
value = 5
import file2
file2.set()
файл2:
import file1
def set():
file1.value = 6
Комментарии:
1. Это очень широкий и запутанный вопрос. Как новичку, вам действительно не следует использовать
exec
. Даже будучи продвинутым программистом, я бы не стал его использовать. Чтобы избежать циклического импорта, в целом вы можете структурировать зависимости между модулями, взяв общий бит кода и поместив его в третий модуль, чтобы циклические модули больше не зависели друг от друга, но оба зависели от третьего. Продолжайте нарушать это до тех пор, пока ваша функциональность не будет правильно разделена.2. Я нашел техническую статью, которая может вам помочь. support.esri.com/en/technical-article/000010647
Ответ №1:
У вас есть несколько вариантов:
- поместите весь свой код в один файл, если он должен быть так тесно связан
value = 5
def set():
value = 6
set()
- поместите код, который использует части других, в третий файл или, другими словами, разбейте свой код, чтобы избежать циклических ссылок — ваш пример, однако, слишком прост, чтобы это сработало.
- передайте значения функциям, которые вы хотите использовать, или передайте объекты, которые вы хотите изменить; импорт и изменение глобалов другого модуля-все равно не очень хороший способ разработки вашей программы:
# this is my_module.py
def set_value(x):
x.value = 6
def increment(x):
return x 1
И в других местах:
import my_module
class X:
value = 5
x = X()
my_module.set_value(x)
y = 5
y = my_module.increment(y)
Комментарии:
1. Возможно, стоит упомянуть импорт функций, которые, хотя и не имеют отношения к делу, могут быть очень полезны при создании очень обобщенных библиотек