Python不同模块之间引用导入

在使用Python语言进行项目开发时难免会将不同功能进行模块划分,但是个个功能模块之间又难免会有模块相互导入引用。
本文章主要是讲解本人在使用Python3进行开发过程中遇到的模块之间相互引用时遇到的问题,以下内容都是基于Python3,
至于Python2怎么使用,请自行使用百度Google一下。

初始化目录

1、首先创建基的目录结构

在这里我创建了一个父目录parent,在父目录下创建subA、subB两个子目录。分别又创建A.py和B.py。最后目录结构如下:
parent
|
|______subA
|   |   
|   |   A.py 
|   |
|
|______subB
|   |
|   |   B.py
|   | 

2、初始化目录结构,将目录变为模块

在这里我们要将单纯的目录变为编程项目中的模块(也可以叫包),在每个层级目录中添加__init__.py 文件。当然
,一般情况下__init__.py 文件为空文件,在某些情况下我们可以将一些要导入包加入到__init__.py 文件中,
具体操作自行Google一下。添加__init__.py 文件之后的目录结构如下:
parent
|
|______subA
|   |  __init__.py 
|   |   A.py 
|   |   
|   |
|
|______subB
|   |   __init__.py
|   |   B.py
|   | 
|   |

3、模块导入

经过上面两个步骤的操作我已经成功的创建了两个subA、subB模块,并创建了两个功能类,
现在我要在subB的B.py功能类中使用subA模块中B.py文件中类的功能。
使用如下语句我就可以so easy实现:
from ..subA.A import A
当然对于这样的语句充满了疑惑,依我目前的了解是这样的
..代表当前我要导入父目录下也就是parent目录下的某个模块,那么如果要导入A类必须是subA模块,
最后也就是from ..subA.A 这样的语法操作
从我的实践操作来看,如果说我要在同级目录下导入相应的模块,直接使用 .  着重强调是一个.。

看一个栗子:现在我有一个需求,给subA模块添加功能一个功能AA.py,在父目录里面我需要有一个主体程序main.py,构建成新的目录如下。现在我要在AA类中使用A类的某些功能函数,我要在main程序中使用subA的A的功能和subB的B的功能

parent
|  __init__.py 
|  main.py
|______subA
|   |  __init__.py 
|   |   A.py 
|   |   AA.py
|   |
|
|______subB
|   |   __init__.py
|   |   B.py
|   | 
|   |
此时,首先我们需要将父目录Parent目录编程使用的模块,也就是__init__.py文件添加进去。然以后来看一下怎么操作:
  1. 我要在AA中使用A中的函数,根据我的时间经验这样就可以了 from .A import A。成功使用导入A使用A的功能。这里使用了 . 就是代表当前目录下的文件。
  2. 我要在main中使用A的功能和B的功能,由1可知我只需要使用
    from .subA.A import A
    from .subB.B import B
    成功的将两个模块里面的功能进行导入

重点强调:这样的层级结构是不能让程序运行的,任何一个模块都不能单独运行,接续看下去

4、程序的运行

经过各种扫操作后发现代码没法运行,竟然报错,具体错误信息忘记了。此时心里真是万马奔腾。
查阅各种资料,有这样一个知识点让我忽略了,最后还是定位到了。Python中是不允许在子目录下直接运行,
如果在子目录下直接运行系统认为你当前的运行目录就行你的顶级目录,然后发现程序报错不报错,
但是TMD一运行就报错,此时我的做法是将main.py再次提出来创建一个更高层级的目录。
grandparent
|  main.py
|
|___parent
|   |  __init__.py 
|   | 
|   |______subA
|   |   |  __init__.py 
|   |   |   A.py 
|   |   |   AA.py
|   |   |
|   |
|   |______subB
|   |   |   __init__.py
|   |   |   B.py
|   |   | 
|   |   |
|___uncle

再次重点强调:只能运行main.py。也有其他方式可以直接运行子目录的文件,但是我感觉在使用ide开发python的时候还是直接运行main方便一点

猜你喜欢

转载自blog.csdn.net/gang521weijie/article/details/80162603
今日推荐