zoukankan      html  css  js  c++  java
  • Python 包的制作(__init__.py)

    如何制作一个自己的
    首先,需要创建一个文件夹,将其作为顶层包,在此文件夹内我们可以定义各个不同的子文
    件夹与 .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!"
  • 相关阅读:
    将新的rpm包添加到本地yum源
    linux cp命令直接覆盖不提示按Y/N的方法
    十一月二十一学习报告
    十一月二十学习报告
    十一月十九学习报告
    十一月十八学习报告
    十一月十七学习报告
    十一月十五学习报告
    十一月十四学习报告
    十一月十三学习报告
  • 原文地址:https://www.cnblogs.com/lnlin/p/9129222.html
Copyright © 2011-2022 走看看