码迷,mamicode.com
首页 > 编程语言 > 详细

Python 包的制作(__init__.py)

时间:2018-06-03 15:37:10      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:ini   code   mod   call   lnl   无法   module   python3   nbsp   

如何制作一个自己的
首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文
件夹与 .py 文件作为各个子包与模块
注意:在每个包文件夹下都需要有一个 __init__.py 文件,此文件可以为空
例如:我们创建一个文件夹Test作为顶层包文件夹,在Test内添加 __init__.py Top.py
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ ls Test
__init__.py  __pycache__  Top.py
[wangml@iZwz976helaylvgqok97prZ Test]$ cat Top.py 
def top():
    print("Top!")
    return
接下来,我们创建一个在与 Test 在同一目录层次的 Test.py 文件,在它里面导入Test包
并引用Test包中包含的模块 Top 中的函数 top
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ cat Test.py 
import Test
Test.Top.top()
执行Test.py这个文件,我们会看到什么呢?是输出 "Top!" 吗?
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py 
Traceback (most recent call last):
  File "Test.py", line 2, in <module>
    Test.Top.top()
AttributeError: module ‘Test‘ has no attribute ‘Top‘
我们看到上面的输出结果,提示在 Test 中并没有找到模块 Top ,这是为什么呢?
问题出在 __init__.py 文件上,我么来看一下 __init__.py 文件
[wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py

这是一个空文件。我们在前面说过,每个包文件内都需要包含一个 __init__.py 文件,只
有这样,这个文件夹才能被识别为一个Package,否则就仅仅是一个文件夹
而在上面的出错消息中我们看到,出错的在第二行, 证明 Test 这个包被成功导入了,但
第二行出了错,在 Test 内找不到 Top 这个模块。但我们已经将 Top.py 文件放在了Test
这个文件夹下的,为何会找不到呢?原因还是在 __init__.py  文件上。 虽然 Test 内有
__init__.py  文件,但仅仅这样,我们只能使 Test 被识别为一个Package, 而无法引用
内部的模块。我们需要在 __init__.py 文件中先导入 Top 模块,才能在外部导入 Test包
时使用这些模块,下面我们修改一下 __init__.py 文件,再执行Test.py看看结果:
[wangml@iZwz976helaylvgqok97prZ Test]$ vim __init__.py 
[wangml@iZwz976helaylvgqok97prZ Test]$ cat __init__.py 
from Test import Top
[wangml@iZwz976helaylvgqok97prZ Test]$ cd ../
[wangml@iZwz976helaylvgqok97prZ pythoncode]$ python3 Test.py 
Top!

和我们设想的一样,输出了 "Top!"

Python 包的制作(__init__.py)

标签:ini   code   mod   call   lnl   无法   module   python3   nbsp   

原文地址:https://www.cnblogs.com/lnlin/p/9129222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!