Python:具有相互依赖关系的模块的导入

詹尼斯

我有两个文件rest_api.pyContact.pyContact与域对象(包含Contact类)相似,而rest_api具有用于设置应用程序的功能。

rest_api我有以下几行:

from Contact import Contact
...
client = MongoClient('localhost',27017)
collection = client.crypto_database.test_collection
def dbcollection(){
     return collection
}
...
api.add_resource(Contact,'/contact/<string:contact_id>')

Contact我尝试执行以下操作:

from rest_api import dbcollection

class Contact(Resource):
    def get(self,contact_id):
        result = {}
        result['data'] = dbcollection.find_one({'contact_id':contact_id})
        result['code'] = 200 if result['data'] else 404
        return make_response(dumps(result), result['code'],{"Content-type": "application/json"})

失败并显示以下错误: ImportError: cannot import name Contact

导入联系人的正确方法是什么,以便它也可以使用rest_api中的变量/函数?

ps如果我将收集代码移动到另一个文件,然后导入该文件,则一切正常,但我认为还有其他方法。

伯潘克

这是循环导入依赖关系,因此无法解决。问题是,导入python模块确实会运行代码,该代码必须遵循一定的顺序,其中一个模块必须首先运行。

我要说的是,将支持代码保存在其他文件中是正确的方法。

但是,在这种情况下,dbcollection导入时实际上并不需要。因此,您可以通过将模块级别的导入删除到get函数中来解决此问题。例如

class Contact(Resource):
    def get(self,contact_id):
        from rest_api import dbcollection
        result = {}
        result['data'] = dbcollection.find_one({'contact_id':contact_id})
        result['code'] = 200 if result['data'] else 404
        return make_response(dumps(result), result['code'],{"Content-type": "application/json"})

类似的方法如下:

import rest_api

class Contact(Resource):
    def get(self,contact_id):
        result = {}
        result['data'] = rest_api.dbcollection.find_one({'contact_id':contact_id})
        result['code'] = 200 if result['data'] else 404
        return make_response(dumps(result), result['code'],{"Content-type": "application/json"})

这应该起作用,因为python做了一些努力来解决循环导入依赖关系:开始导入模块时,它将为该模块创建一个空模块字典。然后,当找到嵌套的导入时,将继续进行该导入。如果那又导入了一个已经在导入过程中的模块,它将跳过它。因此,在Contact.py加载时,import rest_api仅采用已经存在的模块字典。由于尚不包含dbcollection,因此from rest_api import dbcollection失败。import rest_api但是,一个简单的方法确实可行,因为只有在Contact.py完成导入后才寻址它的成员(除非您Contact.get从内部调用模块级别)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在具有相互依赖关系的多模块Android Gradle项目中设置依赖关系?

来自分类Dev

链接具有相互依赖关系的静态fortran库

来自分类Dev

具有相互依赖关系的SQL表

来自分类Dev

Python 类的相互依赖关系

来自分类Dev

模块相互依赖

来自分类Dev

具有相互依赖关系的Makefile和大型项目

来自分类Dev

具有相互依赖关系的Makefile和大型项目

来自分类Dev

处理Android Studio中相互依赖的模块之间的常见依赖关系

来自分类Dev

静态库之间的相互依赖关系

来自分类Dev

相互依赖的C模块的单独编译

来自分类Dev

分发具有ffmpeg依赖关系的Python模块

来自分类Dev

将相互依赖的python模块添加为git子模块

来自分类Dev

导入多个相互依赖的gradle依赖项

来自分类Dev

Python:相互依赖的进程/线程队列

来自分类Dev

两个NSTextField在自动布局中具有相互依赖的宽度

来自分类Dev

光滑3.0.0-多个插入物相互依赖,并具有返回值

来自分类Dev

嵌套级别之间具有相互依赖值的地图规范?

来自分类Dev

lisp:正确调用具有2个相互依赖的参数的函数

来自分类Dev

具有多个相互依赖模型的双反向过滤器访问数据

来自分类Dev

嵌套级别之间具有相互依赖值的地图规格?

来自分类Dev

光滑3.0.0-多个插入物相互依赖,并具有返回值

来自分类Dev

使DropDownLists相互依赖

来自分类Dev

TemplateClasses相互依赖

来自分类Dev

相互依赖的信号

来自分类Dev

使功能相互依赖

来自分类Dev

解决代码中模块之间的相互依赖性

来自分类Dev

解决代码中模块之间的相互依赖性

来自分类Dev

相互依赖的C ++类,由std :: vector持有

来自分类Dev

geany安装有相互依赖的情况

Related 相关文章

热门标签

归档