python中模块的__all__详细使用

python模块中的__all__,用于模块导入时限制,如:from module import *

此时被导入模块若定义了__all__属性,则只有__all__内指定的属性、方法、类可被导入;若没定义,则导入模块内的所有公有属性,方法和类。

1.实例1

#bb.pyclass A():    def __init__(self,name,age):        self.name=name        self.age=ageclass B():    def __init__(self,name,id):        self.name=name        self.id=iddef fun():    print "func() is run!"def fun1():    print "func1() is run!"
#test_bb.pyfrom bb import *a=A(‘zhansan‘,‘18‘)print a.name,a.ageb=B("lisi",1001)print b.name,b.idfun()fun1()

运行结果:zhansan 18lisi 1001func() 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=ageclass B():    def __init__(self,name,id):        self.name=name        self.id=iddef func():    print "func() is run!"def func1():    print "func1() is run!"


#test_bb.pyfrom bb import *a=A(‘zhansan‘,‘18‘)print a.name,a.agefunc()#b=B("lisi",1001)#NameError: name ‘B‘ is not defined#func1()#NameError: name ‘func1‘ is not defined  
运行结果:zhansan 18func() is run!

注:  由于bb.py中使用了__all__=(‘A‘,‘func‘),所以在别的模块导入该模块时,只能导入__all__中的变量、方法、类

3.实例3
#bb.pydef func(): #模块中的public方法    print ‘func() is run!‘def _func(): #模块中的protected方法    print ‘_func() is run!‘def __func(): #模块中的private方法     print ‘__func() is run!‘
#test_bb.pyfrom 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=namedef 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.pyfrom 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.pydef func():    print ‘func() is run!‘def _func():    print ‘_func() is run!‘def __func():    print ‘__func() is run!‘
#test_bb.pyfrom bb import func,_func,__func #可以通过这种方式导入public,protected,privatefunc()_func()__func()

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

注:  虽然_func()、__func()属于"protected , private"权限的,但是如果使用该方式,是可以直接导入访问的 

6.实例6
#bb.pydef func():    print ‘func() is run!‘def _func():    print ‘_func() is run!‘def __func():    print ‘__func() is run!‘
 
#test_bb.pyimport bb #可以通过这种方式导入public,protected,privatebb.func()bb._func()bb.__func()

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

注:  可以通过import模块的方式导入模块,然后使用模块.XX的方式访问"public,protected,private"权限的内容


 
 
 
 


原文地址:https://www.cnblogs.com/wxlog/p/10566628.html

时间: 2024-10-20 15:47:50

python中模块的__all__详细使用的相关文章

查看python中模块的所有方法

查看python中模块的所有方法 安装的python模块,现将查看方法总结如下 一.CMD命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交互解释器中使用help()查看 在交互式解释器中输入>>> help("modules")即可,效果跟在命令行下输入$ pydoc modules是一样的 三.在python交互的解释器下导入sys模块查看 # python的sys模块也是可以用来查看模块信息的     >

Python中模块的发布与安装

模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块.通俗的来说,模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块. 导入模块 import: 引入具体模块,可以一次性引入多个模块,使用逗号隔开即可 eg:import modlue1,module2,module3,.....moduleN ,   使用模块中的函

python中模块和包的概念

1.模块 一个.py文件就是一个模块.这个文件的名字是:模块名.py.由此可见在python中,文件名和模块名的差别只是有没有后缀.有后缀是文件名,没有后缀是模块名. 每个文件(每个模块)都是一个独立的名称空间,也就是说可以在两个(多个)文件中出现同名的函数. import,from.....import...两种导入的区别: 1.import 按模块区分拥有独立的命名空间,要是想使用模块中的函数需要使用      模块名.函数名       的方式来使用. 可以使用import.....as.

关于python中模块的import路径

前两天被一个同事问了一个python的问题: 为什么一个目录里的python文件引用不要另一个兄弟目录的python文件,但是这两个目录的父母录运行时是可以引用到了.当时感觉一直是模块和包的机制问题,回来翻了一下书,发现是引用路径的问题,记录一下. 在python中我们import模块时,系统会在python的引用路径下去查找这个模块文件, 这个引用路径是在编译或者安装的时候指定的,可以在两个地方进行修改: shell的PYTHONPATH环境变量,系统会在这个变量的目录中进行查找. 在pyth

Python中模块使用及面向对象介绍

1.模块使用 模块: 模块式pyth1.on组织代码的基本方式 一个python脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module) 所有的点p为文件都可以作为一个模块导入 模块名与脚本的文件名相同,例如我们编写了一个名为hello.pv的脚本则可以在另一个脚本中用import hello.py来导入它 包: python的模块可以按目录组织为包 创建一个包的步骤: 创建一个名字为包名字的目录,在该目录下创建一个__init__.py文件,根据需要在

python 中 模块,包, 与常用模块

一 模块 模块:就是一组功能的集合体, 我们的程序可以直接导入模块来复用模块里的功能 导入方式 一般为 : import 模块名 在python中, 模块一般分为四个通用类别 1使用python编写.py 文件 2.已被编译为共享库或DLL 的c 或c++扩展 3把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4.使用c编写并链接到python解释器的内置模块 使用模块的优点: 1.从文件级别组织程序, 更方便管理 2.拿来主义, 提升开发效率

Python中模块(Module)和包(Package)的区别

1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Module). 使用模块有什么好处? 最大的好处是大大提高了代码的可维护性.其次,编写代码不必从零开始.当一个模块编写完毕,就可以被其他地方引用.我们在编写程序的时候,也经常引用其他模

python中的dict的详细介绍

一.dict的特性 dict是python中的一个可变的数据类型,用{}表示,dict的key必须是不可变的数据类型,而value的数据类型可以任意 格式:{key:value,key:value,key:value} 注:键值对如果是字符串使用单引号,最后一个键值对没有逗号 dict的优点: ①:查询速度快,可以二分查找 ②:key是不可以重复的 注: 不可变数据类型: 元组,bool,int , str 可以hash 可变数据类型: dict ,list, set 二.dict的方法: (1

Python 中模块间全局变量的使用上的注意

最近用Python写代码,需要用到模块间的全局变量. 网上四处搜索,发现普遍做法是把全局变量放到一个独立的模块中,使用时,导入此全局变量模块即可. 但是在实际使用过程中发现了些小问题:在使用如下代码导入全局变量模块时,各个模块获取到的全局变量都是初始值. from module import global_var 但是如果使用「模块名.全局变量名」来访问时,却又是正常的: import module print module.global_var 为了弄清其中的原委,我写了个测试程序来仔细查看其