我有一个像这样的文件结构的项目
main.py
input/
__init__.py
foo.py
在main中我导入Foo并使用以下行创建它的实例:
main.py
from input.foo import Foo
foo = Foo()
在foo.py里面我需要使用线程,所以我导入它并在init中创建一个线程。
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 :(得分:3)
是的,您应该将所有导入和依赖项放在所有模块的顶部,即使其他模块具有相同的依赖项。 python中的导入仅存在于该模块的范围内。即使import语句存在两次,python也足够聪明,知道它已经被导入,并且不必实际重新导入模块。