我在尝试用pymodm创建flask-extension
时注意到了这一点。
考虑一个pymodm.MongoModel
的用例。你知道吗
#line 1
from pymodm import MongoModel, fields,connect
#line 2
connect("mongodb://localhost:27017/project_matrix")
#line 3
class Model(MongoModel):
name = fields.CharField()
#line 4
Model({"name": "test"}).save()
关于connections.py模块的connect
方法的有趣之处在于,它使用一个名为_CONNECTIONS
的模块级变量来存储所有连接。
将connect导入#line 2
中的当前名称空间后,我们将使用connect方法向_CONNECTIONS
添加一个连接。你知道吗
然后,在#line 4
中,我们调用models.py模块的TopLevelMongoModel类的save方法,它间接调用options.py的collections()
。
options.py导入connections.py的方法_get_db
。你知道吗
Models.py
导入connections.py的connect方法,向模块级变量添加连接。
options.py导入{a2}的{getdb}以某种方式设法从{
这背后的机制/概念是什么?模块级变量是像JavaScript
中那样的全局变量还是我遗漏了什么?你知道吗
事实并非如此。你知道吗
你的导入是这样工作的,因为导入就是这样工作的。
import
语句不会在每次调用时创建新模块。如果该模块以前已导入,则后续导入只需绑定到原始模块。你知道吗考虑以下三个文件:
你知道吗主.py
a、 py
b、 py
而这个Python3.6课程:
注意两件重要的事情:
Inside a
行只打印一次。即使a
是从main
和b
导入的,但Inside a
仅在a
第一次导入时才打印。这一点很重要:a
中的代码只执行一次。对
a.x
的修改同时影响a.x
和b.a.x
。这一点也很重要。只有一个a
模块,因此只有一个a
模块命名空间。任何导入a
的人都将看到具有相同名称和相同对象的相同命名空间。相关问题 更多 >
编程相关推荐