python中模块的__all__详细使用
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"权限的内容
python中模块的__all__详细使用的更多相关文章
- python中模块的__all__属性
python模块中的__all__属性,可用于模块导入时限制,如:from module import *此时被导入模块若定义了__all__属性,则只有__all__内指定的属性.方法.类可被导入. ...
- Python中模块之os的功能介绍
Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...
- 查看python中模块的所有方法
查看python中模块的所有方法 安装的python模块,现将查看方法总结如下 一.CMD命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交 ...
- [python]关于在python中模块导入问题追加总结
[背景] 最近在写程序时,我使用的eclipse编辑器运行都没有问题,然后部署到自动化环境上却偏偏报找不到相应模块问题,现在对该问题在之前的贴子上追加总结 原帖子:[python]关于python中模 ...
- [笔记]Python中模块互相调用的例子
python中模块互相调用容易出错,经常是在本地路径下工作正常,切换到其他路径来调用,就各种模块找不到了. 解决方法是通过__file__定位当前文件的真实路径,再通过sys.path.append( ...
- Python中模块的发布与安装
模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...
- (转载)Python中模块的发布与安装
模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...
- python中模块、包、库的区别和使用
模块:就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块. 包:在模块之上的概念,为了方便管理而将文件进行打包.包目录下第一个文件便是 __init__.py,然后是一些模块文件和 ...
- python中模块和包的概念
1.模块 一个.py文件就是一个模块.这个文件的名字是:模块名.py.由此可见在python中,文件名和模块名的差别只是有没有后缀.有后缀是文件名,没有后缀是模块名. 每个文件(每个模块)都是一个独立 ...
随机推荐
- 正则re
1.简介 其实re在基本模块里已经介绍过,但是在爬虫中re是非常重要的,所以在这里再进行详细描述. re在解析html内容时是效率最高的,但是也是最难的,一般来说,都是结合xpath和re使用,这样解 ...
- dependent object 和root object
dependent object 是root object 下面的字节点.每个节点被访问,都要通过 root object 进入.
- 2019.04.16 python基础50
第五十一节 pycharm安装 https://www.jetbrains.com/pycharm/download/#section=windows 这是另一个叫jetbrains公司开发的 默认 ...
- Oracle 12C 补丁升级
升级步骤 Oracle 12.2.0.1升级至12.2.0.1.190115 1.阅读readme文件 2.检查更新opatch 3.备份程序 4.使用opatchauto工具进行数据库升级 5.打O ...
- zt (stack overflow 介绍)
这是「解密 Stack Overflow 架构」系列的第一篇,本系列会有非常多的内容.欢迎阅读并保持关注. 为了便于理解本文涉及到的东西到底都干些了什么,让我先从 Stack Overflow 每天平 ...
- Complex类的实现
#include<iostream> #include<cmath> using namespace std; class complex{ public: complex() ...
- 异常将上下文初始化事件发送到类的侦听器实例.[org.springframework.web.context.ContextLoaderListener] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class p
严重: 异常将上下文初始化事件发送到类的侦听器实例.[org.springframework.web.context.ContextLoaderListener]org.springframework ...
- flask hook
@app.before_first_requestdef before_first_request(): """在第一次请求之前会访问该函数""&qu ...
- CentOS 7 zabbix实现微信报警
环境 : LAMP CentOS7 192.168.94.11 首先搭建LAMP环境 , 安装zabbix [root@zabbix-server ~]# wget http://repo.zab ...
- sitecore开发入门之如何在代码中获取SITECORE图像URL
using Sitecore; using Sitecore.Data.Items; using Sitecore.Resources.Media; public string GetUrl() { ...