就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,访问帮助中心 /help/reopen-questions 以获得指导。
我正在重新组织我的代码,从而创建新的命名空间。我正在更改模块的“静态”类(每个方法中带有 @staticmethod 的类)。这就是要走的路,对吗?
问题是我对如何在这些模块之间共享资源存有疑问。
假设我有一个模块,我从中进行所有与数据库的连接,当然所有类/方法都共享存储数据库游标的变量(我正在使用 SQLite)。现在,在不同的模块中,它们还必须共享光标。
所以,我的想法是:
在每个模块中声明全局变量。但全球化是邪恶的,吃孩子并抢走我们的工作。所以我不知道这是否是要走的路。
'''Sub Module 1'''
global database_cursor
使用原始database_cursor导入“父亲”database_module并使用如下内容:
'''Sub Module 1'''
db_cursor = database_module.database_cursor
在这种情况下,第二个看起来不错,但我认为在很多情况下会导致递归导入,我想这是应该避免的。
你的第二种方法是要走的路。 Python 导入本质上是单例的。当一个模块被多次导入时,它只会在第一次被执行。后续导入从全局变量中获取模块对象实例。更多相关内容here http://docs.python.org/2/reference/simple_stmts.html#the-import-statement .
共享.py:
class Shared:
def __init__(self):
print("Init shared")
def do_stuff(self, from_mod):
print("Do stuff from {0}. I am instance {1}".format(from_mod, self))
shared = Shared()
foo.py
import shared
shared.shared.do_stuff("foo")
bar.py
import foo
import shared
shared.shared.do_stuff("bar")
如果我们执行 bar.py 我们得到:
>>> Init shared
>>> Do stuff from foo. I am instance <shared.Shared instance at 0x10046df38>
>>> Do stuff from bar. I am instance <shared.Shared instance at 0x10046df38>
所以对于你的情况你可以参考database_module
从您想要的任何地方,它只需初始化一次,因此可以有效地共享您的连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)