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

若没定义,则导入模块内的所有公有属性,方法和类 。

# kk.py
class A():def __init__(self,name,age):self.name=nameself.age=ageclass B():def __init__(self,name,id):self.name=nameself.id=iddef func():print 'func() is called!'
def func1():print 'func1() is called!'
#test_kk.py
from kk import *  #由于kk.py中没有定义__all__属性,所以导入了kk.py中所有的公有属性、方法、类
a=A('python','24')
print a.name,a.age
b=B('python',123456)
print b.name,b.id
func()
func1()

运行结果:
python 24
python 123456
func() is called!

func1() is called!

#kk.py
__all__=('A','func') #在别的模块中,导入该模块时,只能导入__all__中的变量,方法和类
class A():def __init__(self,name,age):self.name=nameself.age=ageclass B():def __init__(self,name,id):self.name=nameself.id=iddef func():print 'func() is called!'
def func1():print 'func1() is called!'
#test_kk.py
from kk import *  #kk.py中定义了__all__属性,只能导入__all__中定义的属性,方法和类
a=A('python','24')
print a.name,a.age
func()
#func1() #NameError: name 'func1' is not defined
#b=B('python',123456) #NameError: name 'B' is not defined

运行结果:

python 24
func() is called!

#kk.py
def func(): #模块中的public方法print 'func() is called!'def _func(): #模块中的protected方法print '_func() is called!'def __func():#模块中的private方法print '__func() is called!'
#test_kk.py
from kk import *  #这种方式只能导入公有的属性,方法或类【无法导入以单下划线开头(protected)或以双下划线开头(private)的属性,方法或类】
func()
#_func() #NameError: name '_func' is not defined
#__func() #NameError: name '__func' is not defined

运行结果:
func() is called!

__all__=('func','__func','_A') #放入__all__中所有属性均可导入,即使是以下划线开头class _A():def __init__(self,name):self.name=namedef func():  print 'func() is called!'  def func1():  print 'func1() is called!'  def _func():  print '_func() is called!'  def __func():  print '__func() is called!' 
from kk 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('python') #_A在__all__中,可以导入
print a.name

运行结果:

func() is called!
__func() is called!
python

#kk.py
def func():print 'func() is called!'def _func():print '_func() is called!'def __func():print '__func() is called!'
#test_kk.py
from kk import func,_func,__func  #可以通过这种方式导入public,protected,private
func()
_func() #NameError: name '_func' is not defined
__func() #NameError: name '__func' is not defined

运行结果:
func() is called!
_func() is called!
__func() is called!

#kk.py
def func():print 'func() is called!'def _func():print '_func() is called!'def __func():print '__func() is called!'
#test_kk.py
import kk  #也可以通过这种方式导入public,protected,private
kk.func()
kk._func() #NameError: name '_func' is not defined
kk.__func() #NameError: name '__func' is not defined

运行结果:
func() is called!
_func() is called!

__func() is called!

#kk.py
import sys__all__ = ["func"]  # 排除了 'sys'def func():print 'func() is called!'
#test_kk.py
from kk import *#print sys.path #NameError: name 'sys' is not defined
func()

运行结果:
func() is called!
如果一个模块需要暴露的接口改动频繁,__all__ 可以这样定义:
__all__ = [
    "foo",
    "bar",
    "egg",
]
最后多出来的逗号在 Python 中是允许的,也是符合 PEP8 风格的。

模块中不使用__all__属性,则导入模块内的所有公有属性,方法和类 。

模块中使用__all__属性,则表示只导入__all__中指定的属性,因此,使用__all__可以隐藏不想被import的默认值。

__all__变量是一个由string元素组成的list变量。
它定义了当我们使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等)。
from <module> import * 默认的行为是从给定的命名空间导出所有的符号(当然下划线开头的变量,方法和类除外)。
需要注意的是 __all__ 只影响到了 from <module> import * 这种导入方式,
对于 from <module> import <member> 导入方式并没有影响,仍然可以从外部导入。

【无标题】Python __all__=[]作用相关推荐

  1. C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中,常常为了美观需要设置窗体属性"FormBorderStyle"(窗体边框和标题栏外观)为None无标题窗口.此时隐藏标题的窗口怎样实现移动呢?我根据自己的项目从 ...

  2. 标题python之单个小写字母转为大写字母(洛谷P5704)

    标题python之单个小写字母转为大写字母(洛谷P5704) 字母转换 展开 题目描述 输入一个小写字母,输出其对应的大写字母.例如输入 q[回车] 时,会输出 Q. 输入格式 无 输出格式 无 in ...

  3. python __all__用法

    今天在阅读程序的时候看到这么一行代码: __all__ = ['S3DIS'] 搜了搜将__all__的用法整理下来. 来源: Python __all__变量用法 [Python]all 暴露接口 ...

  4. 关于WM_NCHITTEST消息(移动无标题对话框多个)

    我为了移动一个无标题栏的窗体,使用了WM_NCHITTEST消息,这个消息大概如下: 通常,我们拖动对话框窗口的标题栏来移动窗口,但有时候,我们想通过鼠标在客户区上拖动来移动窗口. 一个容易想到的方案 ...

  5. mysql输入命令1002无标题_Linux下远程连接MySQL数据库的方法

    步骤 1.在服务器端开启远程访问 首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'p ...

  6. Android 置Activity全屏和无标题

    今天,实在没有什么好些写的内容,所以在网上找了很久,才决定写这个博客.比较简单,还是想保持写博客的习惯. 一.在代码里设置全屏. Activity设置全屏和无标题栏,要用到andorid.view.W ...

  7. ActionBarActivity设置全屏无标题

    新建的Activity继承自ActionBarActivity,设置全屏无标题本来非常easy的事,可是没想到app居然无缘无故的挂,要么就是白屏一片,要么就是黑屏.坑了我一个多小时.!! 原因是Ac ...

  8. android教程1009无标题,Android ActionBarActivity设置全屏无标题实现方法总结_Android_脚本之家...

    Android  ActionBarActivity设置全屏无标题实现方法总结 前言: 新建的Activity继承自ActionBarActivity,设置全屏无标题本来很简单的事,但是没想到app竟 ...

  9. MFC修改窗口无标题和标题信息,修改执执行文件图标

    一.创建MFC后 窗口显示的是 无标题-工程名 修改方法在网上看到了几种,下面介绍下比较简单的一种: 1.在MianFrame.c文件中找到这个函数 BOOL CMainFrame::PreCreat ...

最新文章

  1. 信号与系统:快速傅里叶变换FFT中的实际频率(奈奎斯特频率解析)
  2. leetcode 刷题 3. 无重复字符的最长子串解题思路
  3. eplan图纸怎么发给别人_EPLAN标签导出材料清单(附模板+图文教程)
  4. BackTrack 5 发布了 ---直接下载地址
  5. python程序开发正则表达式_python正则表达式的使用(实验代码)
  6. 集合计数 (容斥原理)
  7. ntfs for mac使用注意事项有哪些?
  8. Python验证码识别初探(tesserocr库)
  9. rundeck入门-基础知识
  10. python中showinfo什么意思_在Python中Windows – 在startupinfo中使用wShowWindow的Popen不会影响显示...
  11. ganglia分布式监控系统
  12. Mac下生成多个SSH KEY并管理
  13. MVC架构下,使用NPOI读取.DOCX文档中表格的内容
  14. P物质肽[DArg1, DTrp5, 7, 9, Leu11]
  15. 诗词格律[7] 诗词的唱和
  16. 4. 计算机科学 (Kaggle项目拆解:泰坦尼克号预测)
  17. Frangi形态学滤波详解
  18. 计算机网络波动大,网络不稳定怎么办,小编教你电脑网络不稳定怎么办
  19. 物联网小试一下——使用阿里云控制Arduino套件灯的开关
  20. 3-2-1 程序控制结构-while循环结构-多次求解一元二次方程?-while循环常见错误?

热门文章

  1. QingTing.Fm-WPF是调用蜻蜓FMAPI 查询API内容展示,进行播放
  2. Eclipse 的安装及使用配置
  3. 亿欧智库推出2021中国低代码市场研究报告,盘点低代码厂商和技术能力
  4. 长时间写代码的颈椎问题的解决方案
  5. 用Python编写MC 还原创造
  6. 获取2022年最新行政区划
  7. 关于勒索病毒WannaCry的9个真相:小白如何防御?
  8. 7 款印象笔记开源替代
  9. 四川省专业技术计算机考试,四川省人力资源和社会保障厅关于转发《人力资源和社会保障部办公厅关于调整全国专业技术人员计算机应用能力考试科目(模块)有关问题的通知》的通知...
  10. 用WebView显示网页