当前位置:  开发笔记 > 编程语言 > 正文

Python包括模块范围问题

如何解决《Python包括模块范围问题》经验,为你挑选了1个好方法。

我正在研究我的第一个重要的Python项目,我遇到了范围问题和在包含文件中执行代码的问题.以前我的经验是PHP.

我想要做的是有一个单独的文件,它设置了许多配置变量,然后在整个代码中使用.另外,我想在全球范围内提供某些功能和类.例如,主文件将包含一个其他文件,该文件将加载一堆常用函数(每个函数都在自己的文件中)和一个配置文件.在这些加载的文件中,我还希望能够访问函数和配置变量.我不想做的是,必须将整个例程放在每个(包含的)文件的开头,以包括所有其余的.此外,这些包含的文件位于各种子目录中,这使得导入它们变得更加困难(特别是如果我必须在每个文件中重新导入).

无论如何,我正在寻找关于构造代码以实现我想要的最佳方法的一般建议.

谢谢!



1> itsadok..:

在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 *

并将一切都视为全球性的,但实际上并不推荐这样做.请记住:命名空间是一个很棒的主意!

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有