python:关于py文件之间相互import的问题
问题背景
调试脚本时,遇到一个问题: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的问题相关推荐
- python导入其他py文件-Python中py文件引用另一个py文件变量的方法
最近自己初学Python,在编程是遇到一个问题就是,怎样在一个py文件中使用另一个py文件中变量,问题如下: demo1代码 import requests r = requests.get(&quo ...
- 使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
文章目录: 1 准备环境 2 调用`Cython库包`把python的`.py`文件生成`.so`文件 2.1 写源码文件 2.2 调用源码接口 2.3 调用Cython库把`.py`源码生成`.so ...
- Python输出py文件模拟代码高亮
此程序十分简单,模拟的过程中简易的处理了Py语法对应的高亮,并输出行号.代码如下: #! /usr/bin/env python # coding:utf-8 # ****************** ...
- python打不开py文件查看代码,用python打开py文件
.py文件无法用python打开 刚刚把python更新到python3.7.2 但是发现之前写的.py的文件双击没有任何我去,你的情况和我一模一样,我也是环境变量和注册表按照网上的方法设置了,却还是 ...
- python怎么调用另一个py文件的变量,Python中py文件引用另一个py文件变量的方法
Python中py文件引用另一个py文件变量的方法 最近自己初学Python,在编程是遇到一个问题就是,怎样在一个py文件中使用另一个py文件中变量,问题如下: demo1代码 import requ ...
- Python的py文件生成pyd文件
使用 py2exe 打包 Python 程序 Python的py文件生成pyd文件 源代码: git@gitee.com:menglingzhi/cython_test.git 另外python打包w ...
- python转换成exe后一闪而过_解决python xx.py文件点击完之后一闪而过的问题
解决python xx.py文件点击完之后一闪而过的问题 1.问题复现: 有时候我们去点击.py文件 文件里明明有打印信息,却一闪而过,没有任何显示 比如以下内容 #!/usr/local/bin/p ...
- python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题
python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题 1.在一个py文件中调用另一个py文件中的变量 新建一个py文件,记为t1.py # t1.py m = 2 n = 1 a ...
- 什么是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把 ...
最新文章
- qt 3d迷宫游戏_Steam上最硬核的恐怖游戏?玩家耗时一个月才通第一关!
- Nginx的rewrite案例之防盗链
- mysql从盘延迟_Mysql-主从延迟解决方法
- Java Socket笔记-udpSocket简单收发包
- 计算机考研哪个专业代码少,考研专业代码到底是什么意思
- MyBatis中的@Mapper注解 @Mappe与@MapperScan关系
- 1-以太坊私钥公钥地址生成
- web页面左右双向箭头(利用CSS样式和图片)——20181130
- C语言lowB排序和NB排序
- Mysql按时间区段(每隔30分钟)统计数据并展示
- 私网地址与公网地址转换
- 轮换对称性实质 和差化积公式之sinθ+cosθ推导 rd原理,二重积分坐标系转化为什么多了个r; 二重积分几何意义: 二重积分物理意义: 二重积分求导:
- 第6周编程题在线测试
- 数说故事全新官网2.0正式上线,全新视觉焕新升级
- python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...
- Shell脚本编程实战
- input 只能输入正整数,包括 0
- 计算机网络的分类2:按网络覆盖范围分类,分为局域网、城域网、广域网
- 海思3556V200 PQTools 工具环境搭建
- Go语言版黑白棋(十一):机器落子