python模块中的__all__,用于模块导入时限制,如:from module import *
此时被导入模块若定义了__all__属性,则只有__all__内指定的属性、方法、类可被导入;若没定义,则导入模块内的所有公有属性,方法和类。
1.实例1
| |
| 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!" |
| |
| |
| |
| 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
| |
| __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!" |
| |
| |
| |
| from bb import * |
| a=A('zhansan','18') |
| print a.name,a.age |
| func() |
| |
| 运行结果: |
| |
| |
| 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! |
| func() #NameError: name '_func' is not defined |
| __func() #NameError: name '__func' is not defined |
| |
| |
注:from bb import * --此方式只能导入公有的属性、方法、类【无法导入以单下划线开头(protected)或以双下划线开头(private)的属性、方法、类】
4.实例4
| |
| __all__=('func','__func','_A') |
| 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!" |
| |
| from bb import * |
| func() |
| func1() |
| _func() |
| a=_A('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"权限的内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?