python中模块的__all__属性详解
- python模块中的__all__属性,可用于模块导入时限制
示例1
- 普通类
# kk.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 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!
示例2
- 利用all进行限制
#kk.py
__all__=('A','func') #在别的模块中,导入该模块时,只能导入__all__中的变量,方法和类
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 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!
示例3
- 以下划线开头时__,在通过import *引用时无法直接被引用
#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
#输出结果
示例4
__all__中所有属性均可导入,即使是以下划线开头
__all__=('func','__func','_A') #放入__all__中所有属性均可导入,即使是以下划线开头
class _A():
def __init__(self,name):
self.name=name
def 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**
示例5
- 以后最好用这种的普遍形态
#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!
示例6
- 看到这种情况,all这个函数还是少用的好
#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()
y
标签:__,name,python,kk,详解,func,print,called From: https://www.cnblogs.com/yangzilaing/p/17026538.html