В этом конкретном примере, это совершенно нормально для module2.py импортировать main.py, есть некоторые Гоча, хотя.
Наиболее очевидным является то, что main.py, вероятно, запускается из командной строки, например python main.py
, что приводит к тому, что этот файл считает, что он называется __main__
. Вы можете импортировать этот модуль в module2, но это нечто необычное; он называется «main.py», и вы хотите import main
. Это приведет к тому, что модуль будет импортирован второй раз.
Для этого должно быть выполнено, чтобы импортировать файл без побочных эффектов , если он не импортирован как__main__
. Очень распространенная идиома в python - проверить это условие в конце модуля.
import module2
global x
hello="Hello"
def main():
x=module2.message()
x.say()
if __name__ == '__main__':
main()
А теперь это просто отлично для module2.py фактически импортировать main
. С другой стороны, импортировать переменные из одного модуля в другой трудно предсказать, когда импорт может быть рекурсивным, у вас может еще не быть этой переменной, потому что модуль уже пытается импортировать вы. С другой стороны, всегда безопасно ссылаться на переменную в модуле с использованием точечного синтаксиса. Так что ваш module2.py должно быть:
import main
class message:
def say():
print main.hello
что также делает его более очевидным, только когда hello
пришли.
Ах да, я действительно не хотел использовать этот метод, но я полагаю, что это единственный вариант. – thelost