1.__all__的作用

  • 如果一个文件中有__all__变量,那么也就意味着这个变量中的元素,不会被from xxx import *时导入
__all__ = ["test1","num"]    #只能让调用test1,num1
def test1():
print("----test1") def test2():
print("----test2") num = 1 class Dog(object):
pass
In [6]: from sendmsg import *   #只能调用__all__里面规定的方法

In [7]: test1()
----test1 In [8]: test2()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-8-35ebc1c532fc> in <module>()
----> 1 test2() NameError: name 'test2' is not defined In [9]: num
Out[9]: 1 In [10]: Dog()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-10-ff6dc2469c3e> in <module>()
----> 1 Dog() NameError: name 'Dog' is not defined
In [1]: import sendmsg    #通过这个方式不受影响

In [2]: sendmsg.
sendmsg.Dog sendmsg.py sendmsg.test2
sendmsg.num sendmsg.test1 In [2]: sendmsg.
sendmsg.Dog sendmsg.py sendmsg.test2
sendmsg.num sendmsg.test1 In [2]: sendmsg.test1()
----test1 In [3]: sendmsg.test2()
----test2

2.包

  • 包:在一个文件夹下有多个模块,并且有个__init__.py文件
  • 模块:1个py文件
###   sendmsg.py
def test1():
print("--sendmsg-test1---") #### recvmsg.py
def test2():
print("---recvmsg--test2---")

  1)版本1:

.
├── infordisplay.py
└── Msg #具有很多模块的集合场所
├── recvmsg.py
└── sendmsg.py
####   IPython 2.4.1     python2认为这只是文件夹

In [1]: import Msg
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-1-32b2df17b362> in <module>()
----> 1 import Msg ImportError: No module named Msg
###   iPython 3.5.2   python认为此文件夹是包

In [1]: import Msg

In [2]: Msg.sendmsg.test1()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-2-889fe4d38288> in <module>()
----> 1 Msg.sendmsg.test1() AttributeError: module 'Msg' has no attribute 'sendmsg'

  2)版本2:__init__.py  让文件夹变成包

.
├── infordisplay.py
└── Msg #包
├── __init__.py
├── recvmsg.py
└── sendmsg.py

    

###   IPython 2.4.1

In [1]: import Msg

In [2]: Msg.sendmsg.test1()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-2-889fe4d38288> in <module>()
----> 1 Msg.sendmsg.test1() AttributeError: 'module' object has no attribute 'sendmsg'
####   Python 3.5.2

In [1]: import Msg

In [2]: Msg.sendmsg.test1()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-2-889fe4d38288> in <module>()
----> 1 Msg.sendmsg.test1() AttributeError: module 'Msg' has no attribute 'sendmsg'

  3)版本3:

###     Msg/__init__.py
__all__ = ["sendmsg"] print("when import this bag ,do this __init__.py ") import sendmsg
####    IPython 2.4.1   可以直接执行
### python3 不能执行 In [1]: import Msg
when import this bag ,do this __init__.py In [2]: Msg.sendmsg.test1()
--sendmsg-test1---

  4)版本4:最终版本

##      Msg/__init__.py

__all__ = ["sendmsg"]

print("when import this bag ,do this __init__.py ")

from . import sendmsg

    #. 当前目录
####   python 2 3 都可以执行
In [1]: import Msg
when import this bag ,do this __init__.py In [2]: Ms
Msg Msg/ In [2]: Msg.sendmsg.test1()
--sendmsg-test1---

day 4 __all__ 包 __init__.py的更多相关文章

  1. Python模块包中__init__.py文件的作用

    转载自:http://hi.baidu.com/tjuer/item/ba37ac4ce7482a0f6dc2f08b 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py. ...

  2. pydev package包中__init__.py作用

    Eclipse用pydev,新建一个pydev package时,总会自动地生成一个空的__init__.py文件. 原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定 ...

  3. python基础===包的导入和__init__.py的介绍

    转自:https://www.cnblogs.com/botoo/p/8241522.html 调用同级目录: – src |– mod.py |– test.py 若在程序test.py中导入模块m ...

  4. Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...

  5. python 项目中包中__init__.py文件的作用

    开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...

  6. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  7. Python的__init__.py用法

    python中包的引入,对于大型项目中都会使用到这个功能,把实现不同功能的python文件放在一起,组成不同lib库,然后在其他地方调用. 包,python源文件+__init__.py 模块,pyt ...

  8. python2中的__init__.py文件的作用

    python2中的__init__.py文件的作用: 1.python的每个模块的包中,都必须有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module. 2.__init_ ...

  9. Python __init__.py 文件使用

    __init__.py的主要作用是: 1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代码(不建议在__init__中写python模块 ...

随机推荐

  1. AngularJS中页面传参方法

    1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...

  2. 代码阅读:AFNetworking背后的思想

    1.一切皆文件:流与操作封装. 2.通信会话:

  3. 汇编试验一:查看CPU和内存,用机器码指令和汇编指令编程

    预备知识: r命令查看,改变CPU寄存器的内容 2.D命令查看内存 3.E命令改写内存 两种方式: 1: 2: 内存中写入机器码 用T命令执行机器码(先将CS:IP指向要执行的内存处) 用a命令写汇编 ...

  4. 利用MSF批量打RMI漏洞

    声明:不会Java. 参考:https://www.secpulse.com/archives/6203.html 下载mjet,https://github.com/mogwaisec/mjet 按 ...

  5. es6之类与对象

    一.类的定义 class Parent{ constructor(name="mukewang"){ this.name=name; } } let v_parant=new Pa ...

  6. Spring(十九)之异常处理

    异常处理,对于项目开发至关重要,总不能用户点击一个页面出错了,直接报500,那样用户体验多不好啊! 所以这里讲的是SpringMVC对异常的处理,希望能给大家带来一定的 帮助和启发. 一.编写实体 p ...

  7. Anaconda常用命令

    conda版本: conda --version 环境信息: 激活环境后,conda info 查看环境已安装包: conda list 新建环境: conda create -n {NAME} [ ...

  8. java中常见的math方法

    java.lang.Math :   绝对值: static int abs(int a)  static long abs(long a)  static float abs(float a)  s ...

  9. careercup-扩展性和存储限制10.3

    题目 给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用. 如果你只有10MB的内存呢? 解答 我们先来做个算术题,40亿个整数大概有多大? * ^ ...

  10. 身份认证系统(一)单WEB应用的身份认证

    身份认证技术,也就是所谓的登录功能,是现代WEB系统最常见的功能之一.本系列文章就试图为大家详细的介绍身份认证技术. Basic认证模式 Basic认证模式是较早被广泛应用的一种HTTP标准提供的认证 ...