文档章节

python中模块的__all__详细使用

o
 osc_y8yehimr
发布于 2019/03/20 18:43
字数 844
阅读 10
收藏 0
def

精选30+云产品,助力企业轻松上云!>>>

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"权限的内容



 
 
 
 

 



o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Python v2.7.5 documentation

原版英文下载地址: 链接: http://pan.baidu.com/s/1mg3M5h2 密码: 7nuq 首先,欢迎大家使用python并且感谢你使用本手册来作为你的参考指南。本手册是基于python2.7.5版本的,手册经历多次更...

Koma
2015/02/27
49
0
Python数据类型——数值型详解

上一篇文章:Python的变量和数据类型 用Python画的滑稽脸  这是我之前用Python的 画的一个滑稽脸的视频,如果想要源码的话可以看我之前的博客: 如何用Python画QQ表情中的滑稽脸。拿走别忘了...

ACfun:)
05/15
0
0

太白非技术类随笔(持续更新中...猛击这里!!!) python基础 python基础一 pytcharm安装详细教程 python基础二 python基础数据类型 Python最详细,最深入的代码块小数据池剖析 深浅copy py...

osc_t0czpxet
06/13
0
0
python的help函数如何使用

help函数是python的一个内置函数,在python基础知识中介绍过什么是内置函数,它是python自带的函数,任何时候都可以被使。help函数能作什么、怎么使用help函数查看python模块学习中函数的用法...

osc_cdixgndu
07/02
4
0
python的help函数如何使用

help函数是python的一个内置函数,在python基础知识中介绍过什么是内置函数,它是python自带的函数,任何时候都可以被使。help函数能作什么、怎么使用help函数查看python模块学习中函数的用法...

wx5ecc6bcb4713c
07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用amoeba实现mysql读写分离

转载马士兵连老师笔记 使用amoeba实现mysql读写分离 1、什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、...

兵荒马乱的青春
9分钟前
0
0
学Vue,就要学会vue JSX(二)

学习JSX,先了解一下createElement 提到JSX,不可避免的就要提到createElement,当你看完本节,你会发现,奇怪的知识又增多了。ok,我们接着上一部分继续讲。这一次的准备工作是了解createEleme...

osc_kurqu050
10分钟前
12
0
学Vue,就要学会vue JSX(三)

是时候使用JSX代替createElement了 接着上面的讲,当我们看到上面用createElement去实现组件,太麻烦了,别说工作效率提高了,就是那些嵌套可以嵌套正确就很赞了,所以我们需要用JSX去简化整...

osc_tq5hz9vv
11分钟前
0
0
protocol buffer使用

protocol buffer使用例子 protocol buffer是什么 https://developers.google.com/protocol-buffers 这是protocol buffer的官方网站,上边有详细的使用方式。 一般常见的序列和反序列方式就是...

RandomObject
12分钟前
0
0
小白的前端之路-HTMl

HTML——超文本标记语言 HTMl里面有标签,标签又分为单标签和双标签,也分为行级元素和块级元素 标签是用<>包裹起来的,而且必须要有<>,否则会直接显示在浏览器上面哦 现在介绍一下常用标签...

osc_e45irv7l
12分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部