在类实例中第二次导入

时间:2016-05-24 17:37:39

标签: python

我有一个像这样的文件结构的项目

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中导入它?在一个程序中两次导入同一个类感觉不对。

1 个答案:

答案 0 :(得分:3)

是的,您应该将所有导入和依赖项放在所有模块的顶部,即使其他模块具有相同的依赖项。 python中的导入仅存在于该模块的范围内。即使import语句存在两次,python也足够聪明,知道它已经被导入,并且不必实际重新导入模块。