问题背景

调试脚本时,遇到一个问题:ImportError: cannot import name ‘A’ from ‘study_case.a’ (/Users/rchera/PycharmProjects/test/study_case/a.py)

具体情况是这样婶儿的:

前些日子写了一个py文件,它的功能主要是创建数据(暂且称为create_data.py,每条数据会生成一个唯一的id);

同时写了另一个py文件,它的功能主要是操作数据,例如对数据进行编辑、删除等(暂且称为operate_data.py);

要对数据进行操作的话,必须传入数据对应的唯一id,所以在operate_data.py中导入了create_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不能循环引用,只是我的写法有问题,然后我继续深入搜索了一番,在一些大神的博客里找到了解决方法

大神都建议不要在python中交叉循环引用(即不要在a中调用b,然后b中又调用a),最好规划好代码的层级,哪些是公共方法,哪些是业务逻辑,把这些提前想好,有利于后期的维护~

OK,接下来按照网上给出的方法,用一个例子演示下如何解决python中循环引用的问题

实例演示

准备2个py文件

a.py

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from study_case.b import Bclass A:@staticmethoddef a1(number):return number * number@staticmethoddef a2():value = B().b(1)return valueif __name__ == '__main__':t = A()print(t.a1(2))

b.py

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from study_case.a import Aclass B:@staticmethoddef b(x):value = A().a1(1)return value + xif __name__ == '__main__':t = B()print(t.b(1))

文件结构如下

按照上面这种写法,运行a或b,都会报错,如下

解决方法1: 在文件的顶部引入,不要用from,使用绝对引入

例如,修改b.py文件内容如下,直接引入a文件

import study_case.aclass B:@staticmethoddef b(x):value = study_case.a.A().a1(1)   return value + xif __name__ == '__main__':t = B()print(t.b(1))

不过我试了下,如果用from的话,只导入a文件这个层级,也不会报错,如下

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from study_case import aclass B:@staticmethoddef b(x):value = a.A().a1(1)return value + xif __name__ == '__main__':t = B()print(t.b(1))

解决方法2: 函数顶部引入,可以用from

例如,修改b.py文件内容如下,在函数名下方第一行引入a文件的类

class B:@staticmethoddef b(x):from study_case.a import Avalue = A().a1(1)return value + xif __name__ == '__main__':t = B()print(t.b(1))

python:关于py文件之间相互import的问题相关推荐

  1. python导入其他py文件-Python中py文件引用另一个py文件变量的方法

    最近自己初学Python,在编程是遇到一个问题就是,怎样在一个py文件中使用另一个py文件中变量,问题如下: demo1代码 import requests r = requests.get(&quo ...

  2. 使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用

    文章目录: 1 准备环境 2 调用`Cython库包`把python的`.py`文件生成`.so`文件 2.1 写源码文件 2.2 调用源码接口 2.3 调用Cython库把`.py`源码生成`.so ...

  3. Python输出py文件模拟代码高亮

    此程序十分简单,模拟的过程中简易的处理了Py语法对应的高亮,并输出行号.代码如下: #! /usr/bin/env python # coding:utf-8 # ****************** ...

  4. python打不开py文件查看代码,用python打开py文件

    .py文件无法用python打开 刚刚把python更新到python3.7.2 但是发现之前写的.py的文件双击没有任何我去,你的情况和我一模一样,我也是环境变量和注册表按照网上的方法设置了,却还是 ...

  5. python怎么调用另一个py文件的变量,Python中py文件引用另一个py文件变量的方法

    Python中py文件引用另一个py文件变量的方法 最近自己初学Python,在编程是遇到一个问题就是,怎样在一个py文件中使用另一个py文件中变量,问题如下: demo1代码 import requ ...

  6. Python的py文件生成pyd文件

    使用 py2exe 打包 Python 程序 Python的py文件生成pyd文件 源代码: git@gitee.com:menglingzhi/cython_test.git 另外python打包w ...

  7. python转换成exe后一闪而过_解决python xx.py文件点击完之后一闪而过的问题

    解决python xx.py文件点击完之后一闪而过的问题 1.问题复现: 有时候我们去点击.py文件 文件里明明有打印信息,却一闪而过,没有任何显示 比如以下内容 #!/usr/local/bin/p ...

  8. python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题

    python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题 1.在一个py文件中调用另一个py文件中的变量 新建一个py文件,记为t1.py # t1.py m = 2 n = 1 a ...

  9. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

最新文章

  1. qt 3d迷宫游戏_Steam上最硬核的恐怖游戏?玩家耗时一个月才通第一关!
  2. Nginx的rewrite案例之防盗链
  3. mysql从盘延迟_Mysql-主从延迟解决方法
  4. Java Socket笔记-udpSocket简单收发包
  5. 计算机考研哪个专业代码少,考研专业代码到底是什么意思
  6. MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
  7. 1-以太坊私钥公钥地址生成
  8. web页面左右双向箭头(利用CSS样式和图片)——20181130
  9. C语言lowB排序和NB排序
  10. Mysql按时间区段(每隔30分钟)统计数据并展示
  11. 私网地址与公网地址转换
  12. 轮换对称性实质 和差化积公式之sinθ+cosθ推导 rd原理,二重积分坐标系转化为什么多了个r; 二重积分几何意义: 二重积分物理意义: 二重积分求导:
  13. 第6周编程题在线测试
  14. 数说故事全新官网2.0正式上线,全新视觉焕新升级
  15. python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...
  16. Shell脚本编程实战
  17. input 只能输入正整数,包括 0
  18. 计算机网络的分类2:按网络覆盖范围分类,分为局域网、城域网、广域网
  19. 海思3556V200 PQTools 工具环境搭建
  20. Go语言版黑白棋(十一):机器落子

热门文章

  1. 数据库执行计划慢导致I/O 慢
  2. Solr实战(二):索引操作
  3. 2015年最好的PHP框架调查统计
  4. 我们应该怀念爱因斯坦的五个原因
  5. ShowAllPic--图片
  6. ppt学习(1) ppt学习网站
  7. 看完你会为自己哭,或者为他们哭
  8. Update: OCS 2007 R2 (RTM) Download and Documentation
  9. 商业周刊:Facebook为何价值100亿美元(转)
  10. php两个数组去掉相同的,php如何删除两个数组中相同的数据