a.py:有没有办法将本地命名空间的一部分给一个importee?
import b
import c
...
import z
class Foo(object):
...
每个放入系统模块B-Z的需要使用类FOO。
某种方式,如导入,允许间接访问(例如通过对象)所有模块A-Z的所有值,同时仍允许每个模块B-Z访问A的名称空间(例如foo)。
a.py:有没有办法将本地命名空间的一部分给一个importee?
import b
import c
...
import z
class Foo(object):
...
每个放入系统模块B-Z的需要使用类FOO。
某种方式,如导入,允许间接访问(例如通过对象)所有模块A-Z的所有值,同时仍允许每个模块B-Z访问A的名称空间(例如foo)。
我现在还不能告诉你正在尝试做的,甚至问,但是这是我最好的猜测:
通常情况下,只需使用经典的进口。
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
的函数中,一切都很好,因为您不会立即使用该值。但是,如果您在foo.py
中执行x = Bar
,那么该值可能尚未定义!
旁注:您可以使用__import__
函数以编程方式导入。如果您将其与os.walk
耦合,那么您可以避免为widget文件夹中的每个文件键入from ... import *
。这是避免错误的重要步骤。
我不明白你在问什么。你能发表一些代码来说明吗? –
编辑帖子后尽可能清楚,我还是不明白。你应该编辑问题并说出你真正想做的事情。 – ninjagecko