首页 > 编程语言 >Python中的__init__.py文件作用

Python中的__init__.py文件作用

时间:2022-12-30 17:46:48浏览次数:49  
标签:__ __. package Python py init print

Python中的__init__.py文件作用

创建的__init__.py 文件都是空,今天看人源码,原来还可以这样玩。

.
├── a.py
├── package
│   ├── b.py
│   ├── __init__.py
│   └── __pycache__

  1. 导包的时候会优先执行init.py文件。

    package/init.py

    print('执行了__ini__.py')
    

    a.py

    from package import *
    

    我们执行python3 a.py,执行结果:

    执行了__ini__.py	
    
  2. init.py导入了sys,那么在导入这个from package import *的时候就可以直接使用sys,简化了其他包引用

    package/init.py

    import sys
    
    print('执行了__ini__.py')
    

    a.py

    from package import *
    print(sys.path)
    

    c.py c和a都引用了sys模块

    from package import *
    print(sys.path)
    

    我们执行python3 a.py,执行结果:

    执行了__ini__.py
    ['/home/tarzan/Desktop/playw_test', '/home/tarzan/Desktop/playw_test', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/home/tarzan/.local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/dist-packages', '/home/tarzan/Desktop/desktop-pro/pyat_activator', '/usr/local/lib/python3.7/dist-packages/dogtail-0.9.9-py3.7.egg', '/usr/local/lib/python3.7/dist-packages/PyAutoGUI-0.9.53-py3.7.egg', '/usr/lib/python3/dist-packages']
    
  3. 没有all的init,和有all的init

    先看看没有all的

    package/init.py

    init1 = 'init1'
    init2 = 'intt2'
    
    print('执行了__ini__.py')
    
    

    a.py

    from package import *
    
    print(init2)
    print(init1)
    

    我们执行python3 a.py,执行结果:

    执行了__ini__.py
    intt2
    init1
    

    看看有all的init

    package/init.py

    init1 = 'init1'
    init2 = 'intt2'
    __all__ = ['init2']
    print('执行了__ini__.py')
    
    
    

    a.py

    from package import *
    
    print(init2)
    print(init1)
    

    我们执行python3 a.py,执行结果:

    执行了__ini__.py
    intt2
    Traceback (most recent call last):
      File "/home/tarzan/Desktop/playw_test/a.py", line 4, in <module>
        print(init1)
    NameError: name 'init1' is not defined
    

    可以看出all解决了让谁暴露、就让谁暴露,如果没有在all中,其他的文件就不能导入。

标签:__,__.,package,Python,py,init,print
From: https://www.cnblogs.com/tarzen213/p/17015459.html

相关文章

  • 全文检索工具solr:第一章:理论知识
    什么是Solr大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能。这就是为什么转移负载到......
  • jQuery.fn.extend() 与 jQuery.extend()
    jQuery.fn如何扩展。jQuery插件$.fn(object)与$.extend(object)jQuery提供了两个方法帮助开发插件$.extend(object);扩展jQuery类本身;$.fn.extend(object);扩展jQuer......
  • Selenium52-实现添加赛区无效用例
    面向对象实现test_007pytest测试方法实现:在原来的步骤前后增加调用通用函数步骤deftest_007(self):self.login_to_add_division_page()driver=......
  • 2022年年终总结
    2022年年终总结:回归整个2022年是心有所成的一年,同时也是波澜起伏的一年。有始有终的一年。在保持薪资水平的前提下,跳槽到自己满意的工作环境中。话说在2020年的9月份通......
  • 四字灯笼--欢度新春
    第一种:添加js代码,两个灯笼!  <scriptsrc="https://www.asessin.com/js/dl.js"type="text/javascript"></script>  把这段代码添加到网站<head>之间即可</h......
  • 开源工作流系统是什么?
    随着数字化时代的到来,开源工作流系统在现代化办公系统中发挥了重要的应用价值,可以说是帮助企业提升办公协作效率的的得力系统之一。那么,什么是开源工作流系统?它的特点又有......
  • k8s图形化生成yaml
    目录创建ratel的配置文件创建RBAC部署ratel创建service后续操作使用Ratel创建DeploymentVolume配置Container配置Container1配置Container2配置InitContainer配置Servic......
  • Shiro-721
    借用p师傅的环境,改成了shiro1.4.1root/secretApapcheShiroRememberMeCookie默认通过AES-128-CBC模式加密,这种加密模式容易受到PaddingOracleAttack(Orac......
  • 大白话5分钟带你走进人工智能-第38节神经网络之TensorFlow利用梯度下降法求解最优解(6
    先看一个传统方法手动实现线性回归和MSE损失函数的方案:importtensorflowastfimportnumpyasnpfromsklearn.datasetsimportfetch_california_housingfromsklearn.pr......
  • 【Kafka专栏】-Kafka从初始到搭建到应用
    =========================================================声明:由于不同平台阅读格式不一致(尤其源码部分),所以获取更多阅读体验!!个人网站地址:​​http://www.lhworldblog.......