python模块中的__all__,用于模块导入时限制,如:from module import *

此时被导入模块若定义了__all__属性,则只有__all__内指定的属性、方法、类可被导入;若没定义,则导入模块内的所有公有属性,方法和类。

1.实例1

#bb.py
class A():
def __init__(self,name,age):
self.name=name
self.age=age
class B():
def __init__(self,name,id):
self.name=name
self.id=id
def fun():
print "func() is run!"
def fun1():
print "func1() is run!"
#test_bb.py
from bb import *
a=A('zhansan','18')
print a.name,a.age
b=B("lisi",1001)
print b.name,b.id
fun()
fun1() 运行结果:
zhansan 18
lisi 1001
func() is run!
func1() is run! 注:
  由于bb.py中没有定义__all__属性,所以导入了bb.py中所有的公有属性
2.实例2
#bb.py
__all__=('A','func')
class A():
def __init__(self,name,age):
self.name=name
self.age=age
class B():
def __init__(self,name,id):
self.name=name
self.id=id
def func():
print "func() is run!"
def func1():
print "func1() is run!"


#test_bb.py
from bb import *
a=A('zhansan','18')
print a.name,a.age
func()
#b=B("lisi",1001)
#NameError: name 'B' is not defined
#func1()
#NameError: name 'func1' is not defined  
运行结果:
zhansan 18
func() is run! 注:
  由于bb.py中使用了__all__=('A','func'),所以在别的模块导入该模块时,只能导入__all__中的变量、方法、类
3.实例3
#bb.py
def func(): #模块中的public方法
print 'func() is run!'
def _func(): #模块中的protected方法
print '_func() is run!'
def __func(): #模块中的private方法
print '__func() is run!'
#test_bb.py
from bb import * #此方式只能导入公有的属性、方法、类【无法导入以单下划线开头(protected)或以双下划线开头(private)的属性、方法、类】
func()
#_func()
#__func() 运行结果:
func() is run! 注:
  from bb import * --此方式只能导入公有的属性、方法、类【无法导入以单下划线开头(protected)或以双下划线开头(private)的属性、方法、类】
  _func() #NameError: name '_func' is not defined
  __func() #NameError: name '__func' is not defined

4.实例4
#bb.py
__all__=('func','__func','_A')#放入__all__中所有属性均可导入,即使是以下划线开头
class _A():
def __init__(self,name):
self.name=name
def func():
print "func() is run!"
def func1():
print "func1() is run!"
def _func():
print "_func() is run!"
def __func():
print "__func() is run!"
#test_bb.py
from bb import *
func()
#func1()#func1不在__all__中,无法导入 NameError: name 'func1' is not defined
#_func()#_func不在__all__中,无法导入 NameError: name '_func' is not defined
__func()#__func在__all__中,可以导入
a=_A('zhangsan')#_A在__all__中,可以导入
print a.name 运行结果:
func() is run!
__func() is run!
zhangsan 注:
  放入__all__中所有属性均可导入,即使是以下划线开头
  func1() #func1不在__all__中,无法导入 NameError: name 'func1' is not defined
  _func() #_func不在__all__中,无法导入 NameError: name '_func' is not defined
  __func() #__func在__all__中,可以导入
  a=_A('python') #_A在__all__中,可以导入
5.实例5
#bb.py
def func():
print 'func() is run!'
def _func():
print '_func() is run!'
def __func():
print '__func() is run!'
#test_bb.py
from bb import func,_func,__func #可以通过这种方式导入public,protected,private
func()
_func()
__func() 运行结果:
func() is run!
_func() is run!
__func() is run! 注:
  虽然_func()、__func()属于"protected , private"权限的,但是如果使用该方式,是可以直接导入访问的 6.实例6
#bb.py
def func():
print 'func() is run!'
def _func():
print '_func() is run!'
def __func():
print '__func() is run!'
 
#test_bb.py
import bb #可以通过这种方式导入public,protected,private
bb.func()
bb._func()
bb.__func() 运行结果:
func() is run!
_func() is run!
__func() is run! 注:
  可以通过import模块的方式导入模块,然后使用模块.XX的方式访问"public,protected,private"权限的内容


 
 
 
 
												

python中模块的__all__详细使用的更多相关文章

  1. python中模块的__all__属性

    python模块中的__all__属性,可用于模块导入时限制,如:from module import *此时被导入模块若定义了__all__属性,则只有__all__内指定的属性.方法.类可被导入. ...

  2. Python中模块之os的功能介绍

    Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...

  3. 查看python中模块的所有方法

    查看python中模块的所有方法     安装的python模块,现将查看方法总结如下 一.CMD命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交 ...

  4. [python]关于在python中模块导入问题追加总结

    [背景] 最近在写程序时,我使用的eclipse编辑器运行都没有问题,然后部署到自动化环境上却偏偏报找不到相应模块问题,现在对该问题在之前的贴子上追加总结 原帖子:[python]关于python中模 ...

  5. [笔记]Python中模块互相调用的例子

    python中模块互相调用容易出错,经常是在本地路径下工作正常,切换到其他路径来调用,就各种模块找不到了. 解决方法是通过__file__定位当前文件的真实路径,再通过sys.path.append( ...

  6. Python中模块的发布与安装

    模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...

  7. (转载)Python中模块的发布与安装

    模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...

  8. python中模块、包、库的区别和使用

    模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...

  9. python中模块和包的概念

    1.模块 一个.py文件就是一个模块.这个文件的名字是:模块名.py.由此可见在python中,文件名和模块名的差别只是有没有后缀.有后缀是文件名,没有后缀是模块名. 每个文件(每个模块)都是一个独立 ...

随机推荐

  1. 搭建Sonar代码走查环境

    1.下载SonarQube并解压(查看检测结果用) 2.根据自己系统下载SonarQube Runner(检测代码用,旧版名叫Sonar Scanner) 3.在自己要检测的工程目录下建立sonar- ...

  2. 学号20175313 《Arrays和String单元测试》第八周

    目录 Arrays和String单元测试 一.String类相关方法的单元测试 二.Arrays类相关方法的单元测试 三.测试过程中遇到的问题及其解决方法 四.码云链接 五.参考资料 Arrays和S ...

  3. Ajax post数据查询

    <?php $server = '127.0.0.1'; $user = 'root'; $password = ''; $database = 'yiibaidb'; $officecode ...

  4. vue中使用vue-quill-editor及上传图片到自己服务器

    第一步,下载依赖 cnpm install vue-quill-editor --save 第二步,再main.js里引入组件(我这里是全局注册) // 富文本编辑器 import VueQuillE ...

  5. Python魔法方法详解

      魔法方法 含义   基本的魔法方法 __new__(cls[, ...]) 1.__new__是在一个对象实例化的时候所调用的第一个方法 2.它的第一个参数是这个类,其他的参数是用来直接传递给__ ...

  6. 00004-20180324-20180517-fahrenheit_converter--华氏温度到摄氏温度转换计算器

    00004-20180324-20180517-fahrenheit_converter--华氏温度到摄氏温度转换计算器 def fahrenheit_converter(C): fahrenheit ...

  7. 记录tiny6410 使用linux-2.6.28.6内核遇到starting kernel...的问题

    1\问题的解决主要是参考了tiny210相同的问题 2\/home/suxuandong/Documents/computer/linux_kernel/tiny6410/linux-2.6.28.6 ...

  8. Apache Kylin学习资料

    官方文档: http://kylin.apache.org/cn/docs/tutorial/web.html kylin对接hive实现实时查询:https://www.cnblogs.com/65 ...

  9. Django的安装和一些操作

    1.安装 (1) 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 (2) pycharm setting —> ...

  10. Http请求头和常见响应状态码

    请求头: Accept:指浏览器或其他客户可以接爱的MIME文件格式.可以根据它判断并返回适当的文件格式. Accept-Charset:指出浏览器可以接受的字符编码.英文浏览器的默认值是ISO-88 ...