首页 > 编程语言 >python中模块的__all__属性详解

python中模块的__all__属性详解

时间:2023-01-05 09:12:46浏览次数:45  
标签:__ name python kk 详解 func print called

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

相关文章

  • 三种异步模式(扫盲)&BackgroundWorker
    1.APM&EAP&TAP.NET支持三种异步编程模式分别为APM、EAP和TAP:1.基于事件的异步编程设计模式 (EAP,Event-basedAsynchronousPattern)EAP的编程模式的代码命名有以下特点: ......
  • Linux目录结构、查看目录命令
    ###一、Linux目录结构​      设计哲学:​            一切皆文件!!!!!```​      /   根目录​            /root​......
  • 使用Jmeter轻松实现AES加密测试
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试大家在自......
  • CF 1770 解题报告
    CF1770.GoodBye2022,2023isNear晚上十点三十五开打,十一点多就睡觉了,只做了A、C题,其他题都是VP的。感觉质量很高,签到题A题都卡了我一会。A.KoxiaandWhiteboard......
  • linux 中sed命令将指定列替换为特定的内容
     001、[root@pc1test]#lsa.txt[root@pc1test]#cata.txtdiy5fersd34d83fdgdgxej7[root@pc1test]......
  • 安卓-SurfaceView
    一、SurfaceView是View的孪生兄弟View通过刷新来重绘视图,安卓系统通过发出VSYNC信号来进行屏幕重绘,刷新间隔是16ms。如果一次重绘耗时太长超过16ms会出现警告的log告诉你......
  • 低代码开发——创新赋能企业办公模式转变
    近年来,国内云计算高速发展、SAAS软件模式快速普及、企业数字化的需求增长等方面促进了低代码平台开发与应用的高速发展,使之成为继RPA之后企业数字化转型的明星工具。如果......
  • Wpf原生MvvM
    usingSystem.ComponentModel;namespaceWpfTestBlankApp.Models{publicclassNickname:INotifyPropertyChanged{publiceventPropertyChanged......
  • Tomcat通过脚本自动部署
    http://t.zoukankan.com/yshyee-p-11866140.html 1:autodeploy_tomcat_app.shnow=`date+%Y%m%d%H%M%S`tomcatPath=/home/test/apache-tomcat-8.5.34backupPath=/hom......
  • 关于头像
    这几天看到了\(dottle\)的头像,大受震撼(雾),于是佩服起\(AI\)的强大,时代终究是变了啊!于是乎决定让\(AI\)给自己也画一画。于是把\(npy\)的名字搞进了文心大模型,结果就出来了......