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. python练习题-day25

    class Person: __key=123 def __init__(self,username,password): self.username=username self.__password ...

  2. GCD的简单使用方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/like7xiaoben/article/details/25629365 /* 创建一个队列用来运行 ...

  3. linux运维需要掌握什么知识?linux运维学习路线

    linux运维需要掌握什么知识?这个问题算是老生常谈了,但是本人认为知道需要掌握什么知识不是重点,重点是我们需要知道运维是做什么的?再来根据工作需求去讨论需要学习什么知识才是正途,须知知识是学不完的, ...

  4. 用html5实现音频播放器

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. Centos7 下安装mysql5.7.17(glibc版)

    一.安装前的检查 1.1 检查 linux 系统版本 [root@localhost ~]# cat /etc/system-release 1.2 检查是否安装了 mysql [root@local ...

  6. PHP获取汉字首字母函数

    <?php function getFirstCharter($str) { if (empty($str)) { return ''; } $fchar = ord($str{0}); if ...

  7. platform怎么实现数据数据和驱动分离

    一些重要的结构体: struct platform_device { const char * name; int id; struct device dev; u32 num_resources; ...

  8. Linq基础+Lambda表达式对数据库的增删改及简单查询

    一.Linq to sql 类 高集成化的数据库访问技术 使用Linq可以代替之前的Ado.Net,省去了自己敲代码的实体类和数据访问类的大量工作 实体类: 添加一个Linq to sql 类 --- ...

  9. Java的流

    Java中的流主要是用来读写文件的.只要明确你是读文件还是写文件就可以确定使用哪种流了.读:read   写:writer 1.读文件:filereader这个类,顾名思义就知道是读文件了. 2.写文 ...

  10. vue环境命令

    1.下载安装note.js用于VUE开发环境 2.VUE项目开发环境安装依赖,命令行进入项目代码目录下执行如下命令npm install 3.开发环境运行npm run dev 4.打包项目npm r ...