Python: __init__.py 作用

简介: Python: __init__.py 作用

阅读本文需要1.2分钟


__init__.py 的作用

__init__.py 主要是用来初始化 Python 包(packages)的,它在模块加载最开始运行。

以下目录结构为示例:


├─test                                    
│  ├─package_1
│  │  ├─__init__.py 
│  │  ├─m1.py    
│  ├─package_2  
│  │  ├─__init__.py 
│  │  └─m2.py
│  ├─test.py

其中包含两个包 package_1,package_2

__init__.py 中有什么

如上目录结构,如果两个包中的__init__.py 都为空的话,默认在 test.py 中我们只能执行如下:


from package_2 import m2
print(m2.m2s())

当想要执行


import package_2
print(package_2.m2.m2s())


from package_2 import *
print(m2.m2s())

则会抛出异常


AttributeError: module 'package_2' has no attribute 'm2'

这是因为在__init__.py 中并没有进行包提升


如何执行


此时以 package_2 包中的__init__.py 为例

当我们在包中提升导入权限即可:


from package_2.m2 import m2s

在 test.py 中,执行

    from package_2 import m2s
    print(m2s())

    通常我们经常还会遇到 from xxx import *

    我们只需要在 init.py 中加载 all 允许全部导出的模块即可,如在 package_2 的 init.py 中加入


    __all__ = ['m2']

    test.py 中执行


    from package_2 import *
    print(m2.m2s())

    __all__ 是一个列表变量,放的是你希望导入的模块的名字。

    __init__.py 中定义了 __all__ 变量时,import * 只能导入 __all__允许的模块

    原文地址:http://blog.crcms.cn/?p=115

    相关文章
    |
    3天前
    |
    Python
    Python 的其他主题:Python 中的 `__init__.py` 文件有什么作用?
    Python 的其他主题:Python 中的 `__init__.py` 文件有什么作用?
    |
    3天前
    |
    Python
    Python 基础知识:Python 中的 `__init__` 和 `__new__` 方法有什么区别?
    Python 基础知识:Python 中的 `__init__` 和 `__new__` 方法有什么区别?
    |
    3天前
    |
    算法 开发者 Python
    【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
    【Python 基础扫盲 】self参数、__init__方法和.__str__方法的用处和区别?
    24 0
    |
    3天前
    |
    Python
    Python中__new__和__init__的区别与联系
    Python中__new__和__init__的区别与联系
    23 0
    |
    3天前
    |
    C++ 计算机视觉 Python
    【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
    【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
    48 0
    【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
    |
    3天前
    |
    Python
    解释Python中的`__init__`和`__new__`方法的区别。
    解释Python中的`__init__`和`__new__`方法的区别。
    |
    9月前
    |
    设计模式 存储 Python
    【从零学习python 】46. Python中的__new__和__init__方法解析及单例设计模式
    【从零学习python 】46. Python中的__new__和__init__方法解析及单例设计模式
    43 0
    |
    3天前
    |
    Java C++ Python
    python中的类,对象,成员方法,构造方法,__init__,__lt__,__le__,__eq__
    python中的类,对象,成员方法,构造方法,__init__,__lt__,__le__,__eq__
    35 0
    |
    5月前
    |
    供应链 安全 开发工具
    供应链安全情报 | 恶意py包伪装代理SDK进行后门攻击,目标锁定python开发者
    2023年11月28号,悬镜供应链安全实验室在Pypi官方仓库(https://pypi.org)监测到两起伪装成http和socks5代理SDK的开源组件投毒事件。python开发者一旦下载安装这些投毒Py包(libproxy、libsocks5),会触发执行Py包中的恶意代码,最终将导致开发者系统被投毒者植入恶意后门。
    46 0
    |
    9月前
    |
    Python
    Python的self作用,以及__init__,__new__
    Python的self作用,以及__init__,__new__
    35 0