a.py:
import b
import c
...
import z
class Foo(object):
...
每个模块B-Z需要使用类foo。
某种方式,如导入,允许间接访问(例如通过对象)所有模块A-Z的所有值,同时仍然允许每个模块B-Z访问A的命名空间(例如foo)。
答案 0 :(得分:2)
没有。他们每个人必须自己导入A
。
答案 1 :(得分:2)
我仍然不知道你要做什么甚至询问,但这是我最好的猜测:
通常,只使用经典导入。
IF 模块越来越大,或者如果您有充分的理由将事情分开但希望共享相同的命名空间,则可以将值“提升”到虚拟命名空间中。例如,如果我有widget.Foo
和widget.Bar
并希望它们位于不同的文件中,但我希望能够在每个文件中键入Foo
和Bar
,我通常会到from widget import Foo
和from widget import Bar
。如果您有许多这些文件(foo.py,bar.py,baz.py,...,zeta.py),它可能会有点笨拙。因此,您只需在widget/__init__.py
中导入一次,然后在一次的每个文件夹中导航from foo import *, from bar import *, ...
,然后只在from widget import *
进行一次,就可以改善您的情况每个模块。你已经完成了......好吧......差不多......
这会让你进入一个循环的导入场景,你必须非常小心:Circular (or cyclic) imports in Python如果你在Bar
的函数中引用foo.py
,那就没问题,一切都很好,因为你没有立即使用该值。但是,如果您在x = Bar
中执行foo.py
,则可能尚未定义该值!
旁注:您可以使用__import__
函数以编程方式导入。如果您将此与os.walk
结合使用,则可以避免必须为窗口小部件文件夹中的每个文件键入from ... import *
。这是避免错误的关键和必要步骤。