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. 快速搭建一个SSM框架demo

    我之所以写一个快速搭建的demo,主要想做一些容器的demo,所以为了方便大家,所以一切从简,简单的3层架构 先用mysql的ddl,后期不上oracle的ddl ; -- ------------- ...

  2. ThinkPHP3.2.3快速入门:基础篇

    一.安装 thinkphp无需安装,只需将从官网上下载的压缩包解压后,把所有文件放到localhost根目录里就行了 二.压缩包中文件简述 :应用程序文件夹.自己所写的文件都放在这个文件夹里面 :公用 ...

  3. c#类中字段和方法中变量的声明问题

    字段和局部变量的作用域冲突 某些情况下可以区分名称相同,作用域相同的两个标识符.原因是C#在变量之间有一个基本的区分,它把在类级别声明的变量看作 字段,而把在方法中声明的变量看作局部变量. class ...

  4. Mysql数据库的简单语法

    Mysql数据库是目前使用最为广泛的数据对,对于小型企业的支持度,比oracle数据库友好很多. mysql数据库的基本语法 1:创建并且使用数据库 找出服务器上当前存在什么数据库: SHOW DAT ...

  5. Grunt中批量无损压缩图片插件--Grunt-contrib-imagemin

    Photoshop 切出的图片,无论是 PNG 还是 JPEG/JPG 格式,都含有许多相关信息,又或多余的颜色值,这些信息和颜色值,对网页前端并没有用处,反而增加图片大小,所以 Google Pag ...

  6. SimpleProfile_GetParameter && SimpleProfile_SetParameter

    /********************************************************************* * @fn SimpleProfile_GetParame ...

  7. Gradle Goodness: Changing Name of Default Build File

    Gradle uses the name build.gradle as the default name for a build file. If we write our build code i ...

  8. Linq不分组求多列的和

    我们需要写Linq查询语句,使用let来创建一个新的变量 Let 关键字 “let”关键字在查询语法中很有用.它会投影一个新的范围变量,允许重新使用表达式并使查询更具可读性. 例如: 这里需要写,两遍 ...

  9. 绘图驱动-OSD原理2

    转载自:http://blog.pfan.cn/programming/21209.html 现在已经可以通过修改存储单元内容来改变OSD的像素,但还有个关键的问题是如何根据需要来进行操作,即如何将某 ...

  10. hadoop-1.2.1运行过程中遇到的问题

    在hadoop-1.2.1中运行所遇到的问题: 2014-11-14   22:43:42  在服务器上运行hadoop-1.2.1中的datanode,出现了内存占用过大,导致ssh登陆出现如下问题 ...