国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中模塊的__all__屬性詳解

2020-01-04 16:40:17
字體:
來源:轉載
供稿:網友

python/268595.html">python模塊中的__all__屬性,可用于模塊導入時限制,如:

from module import *

此時被導入模塊若定義了__all__屬性,則只有__all__內指定的屬性、方法、類可被導入。

若沒定義,則導入模塊內的所有公有屬性,方法和類

# 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!

#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!

#kk.py def func(): #模塊中的public方法   print 'func() is called!' def _func(): #模塊中的protected方法   print '_func() is called!' def __func():#模塊中的private方法   print '__func() is called!' 
#test_kk.py from kk import * #這種方式只能導入公有的屬性,方法或類【無法導入以單下劃線開頭(protected)或以雙下劃線開頭(private)的屬性,方法或類】  func() #_func() #NameError: name '_func' is not defined #__func() #NameError: name '__func' is not defined 

運行結果:

func() is called!

__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

#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 

運行結果:

func() is called!
_func() is called!
__func() is called!

#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!

#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() 

運行結果:

func() is called!

如果一個模塊需要暴露的接口改動頻繁,__all__ 可以這樣定義:

__all__ = [  "foo",  "bar",  "egg",]

最后多出來的逗號在 Python 中是允許的,也是符合 PEP8 風格的。

模塊中不使用__all__屬性,則導入模塊內的所有公有屬性,方法和類 。

模塊中使用__all__屬性,則表示只導入__all__中指定的屬性,因此,使用__all__可以隱藏不想被import的默認值。

__all__變量是一個由string元素組成的list變量。

它定義了當我們使用 from <module> import * 導入某個模塊的時候能導出的符號(這里代表變量,函數,類等)。

from <module> import * 默認的行為是從給定的命名空間導出所有的符號(當然下劃線開頭的變量,方法和類除外)。

需要注意的是 __all__ 只影響到了 from <module> import * 這種導入方式,

對于 from <module> import <member> 導入方式并沒有影響,仍然可以從外部導入。

總結

以上就是本文關于python中模塊的__all__屬性詳解的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德保县| 藁城市| 邳州市| 苍南县| 吴桥县| 龙井市| 汤阴县| 延长县| 海林市| 沂水县| 山东| 阿拉善左旗| 锦州市| 云林县| 班玛县| 衡南县| 罗源县| 女性| 怀化市| 宁波市| 普安县| 长丰县| 河源市| 昂仁县| 新绛县| 来宾市| 浪卡子县| 霍林郭勒市| 响水县| 阳城县| 宁津县| 陇川县| 阳信县| 文成县| 花莲县| 怀远县| 聂拉木县| 呼伦贝尔市| 宾阳县| 蓬安县| 潼关县|