python 相互import,python中关于import引用
本文主要介绍python中py文件之间相互导入的问题。本文用一个例子来演示如何解决python中的循环引用问题。有需要的朋友可以参考一下。
00-1010问题背景示例演示
目录
在调试脚本时,我遇到了一个问题:ImportError :无法从“study _ case.a”中导入名称“a”(/users/rch era/pycharmprojects/test/study _ case/a . py)
具体情况如下:
前几天写了一个py文件,它的作用主要是创建数据(暂时叫create_data.py,每一条数据都会生成一个唯一的ID);
同时编写另一个py文件,其功能主要是操纵数据,比如编辑、删除数据(暂称为operate _ data . py);
要对数据进行操作,必须传入数据对应的惟一id,所以create_data.py中生成数据的方法被导入到operate_data.py中
在这一点上,一切都很顺利,没有任何问题。
由于某些情况,我需要在数据生成后立即删除它。
我打算在create_data.py中直接写另一个删除数据的方法,但是后来我想,删除数据的方法之前已经在operate_data.py中定义过了。
在这种情况下,直接在create_data.py中导入operate_data.py,并参考其删除数据的方法。
但实际上,并没有达到预期的效果。按照上述思路调整脚本后,create_data.py和operate_data.py都无法运行,会提示顶部列出的错误~
我在网上搜了一下,大致原因是create_data.py和operate_data.py两个文件互相调用。
当然不是说python不能循环引用。只是我的文笔有问题。然后我继续深入搜索,在一些大神的博客里找到了解决办法。
参考文章:
https://fishc.com.cn/forum.php?mod=viewthreadtid=60873 page=1 # PID 2337627
https://www.zhihu.com/question/19887316
https://blog . igevin . info/posts/how-to-avoid-python-circle-import-error/
赞美诗大神们都建议不要在python中交叉引用(即不要在A中调用B,然后在B中调用A)。最好规划一下代码的层次结构,哪些是公共方法,哪些是业务逻辑。提前想到这些对后期保养有好处~
好的,那么,根据网上给出的方法,用一个例子来演示如何解决python中的循环引用问题。
问题背景
准备2份拷贝文件
a.py
从研究_案例. B导入B
A:级
@静态方法
定义a1(编号):
退货数量*数量
定义a2():
值=B()。乙(1)
返回值
if __name__==__main__:
t=A()
打印(t.a1(2))
碧桂园
从研究案例导入
B:级
@静态方法
定义b(x):
值=A()a1(1)。
返回值x
if __name__==__main__:
t=B()
打印(t.b(1))
文件结构如下
按照上面的写法,运行A或B会给出一个错误,如下所示
解决方案1:在文件的顶部介绍,而不是从,使用绝对介绍。
比如修改b.py文件的内容如下,直接导入A文件
导入研究_案例. a
B:级
@静态方法
定义b(x):
value=study _ case . a . a()a1(1)。
返回值x
if __name__==__main__:
t=B()
打印(t.b(1))
但是,我试过了。如果我使用from,我将只导入A文件级别,并且不会报告错误,如下所示
从研究案例导入
B:级
@静态方法
定义b(x):
值=A . A()a1(1)。
返回值x
if __name__==__main__:
t=B()
打印(t.b(1))
解决方案2:介绍在函数的顶部,可以从
比如修改b.py文件的内容如下,在函数名下面第一行引入一个文件的类。
B:级
@静态方法
定义b(x):
从研究案例导入
值=A()a1(1)。
返回值x
if __name__==__main__:
t=B()
打印(t.b(1))
关于python中py文件相互导入的这篇文章到此为止。关于pythonpy文件导入的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。