我正在研究我的第一个重要的Python项目,我遇到了范围问题和在包含文件中执行代码的问题.以前我的经验是PHP.
我想要做的是有一个单独的文件,它设置了许多配置变量,然后在整个代码中使用.另外,我想在全球范围内提供某些功能和类.例如,主文件将包含一个其他文件,该文件将加载一堆常用函数(每个函数都在自己的文件中)和一个配置文件.在这些加载的文件中,我还希望能够访问函数和配置变量.我不想做的是,必须将整个例程放在每个(包含的)文件的开头,以包括所有其余的.此外,这些包含的文件位于各种子目录中,这使得导入它们变得更加困难(特别是如果我必须在每个文件中重新导入).
无论如何,我正在寻找关于构造代码以实现我想要的最佳方法的一般建议.
谢谢!
在python中,通常的做法是拥有一组实现各种功能的模块,然后只有一个模块,它是所有功能的访问点.这基本上就是门面模式.
举个例子:你正在写一个包foo
,其中包括bar
,baz
,和moo
模块.
~/project/foo ~/project/foo/__init__.py ~/project/foo/bar.py ~/project/foo/baz.py ~/project/foo/moo.py ~/project/foo/config.py
你通常会这样写__init__.py
:
from foo.bar import func1, func2 from foo.baz import func3, constant1 from foo.moo import func1 as moofunc1 from foo.config import *
现在,当你想使用你刚才做的功能时
import foo foo.func1() print foo.constant1 # assuming config defines a config1 variable print foo.config1
如果你愿意,你可以安排你的代码,这样你只需要写
import foo
在每个模块的顶部,然后通过foo
(你可能应该命名为"全局"或类似的东西)来访问所有内容.如果您不喜欢名称空间,您甚至可以这样做
from foo import *
并将一切都视为全球性的,但实际上并不推荐这样做.请记住:命名空间是一个很棒的主意!