2016-05-24 1 views
1

У меня есть проект с файловой структурой, как этотИмпорт второй раз внутри экземпляра класса

main.py 
input/ 
    __init__.py 
    foo.py 

Внутри магистральный я импортировать Foo и создать экземпляр с помощью этих строк:

основной. ру

from input.foo import Foo 
foo = Foo() 

Внутри foo.py мне нужно использовать многопоточность, поэтому я импортировать его и создать поток в инициализации.

foo.py

from threading import Thread 

class Foo 
    def __init__(self): 
     newThread = Thread() 

Позже я решил, что было бы полезно иметь резьбу в main.py поэтому я также импортировать его там с помощью from threading import Thread. Все работало так, как должно было до этого момента. Я думал, что было избыточно импортировать Thread дважды во время выполнения, поэтому я удалил верхнюю строку из foo.py и снова запустил ее. На этот раз я получил NameError: global name 'Thread' is not defined, когда программа достигла линии newThread = Thread().

Есть ли способ для импорта в main.py и не импортировать его снова в foo.py? Неправильно импортировать один и тот же класс дважды в одну программу.

+0

«Неправильно импортировать один и тот же класс дважды в одну программу». - Зачем? Это совершенно нормально. Это не вызовет проблемы с двойной инициализацией, и сам Python делает это несколько раз, прежде чем ваш код даже запустится. – user2357112

+0

Технически да, вы могли бы передать 'Thread' в инициализатор' Foo', но это действительно не так, чтобы импортировать модуль один раз в файл. – L3viathan

ответ

3

Да, вы должны поместить все импорт и зависимости в верхней части всех своих модулей, даже если другие модули имеют одинаковые зависимости. Импорт в python существует только в рамках этого модуля. Несмотря на то, что оператор import существует дважды, python достаточно умен, чтобы знать, что он уже импортирован и ему не нужно будет действительно повторно импортировать модуль.

Смежные вопросы