生活随笔
收集整理的這篇文章主要介紹了
python模块中的__all__属性
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自:http://blog.csdn.net/sxingming/article/details/52903377
python模塊中的__all__屬性,可用于模塊導入時限制,如:
from module import *
此時被導入模塊若定義了__all__屬性,則只有__all__內(nèi)指定的屬性、方法、類可被導入。
若沒定義,則導入模塊內(nèi)的所有公有屬性,方法和類 。
?
[python]?view plaincopy
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!'?? [python]?view plaincopy
from?kk?import?*??a=A('python','24')??print?a.name,a.age??b=B('python',123456)??print?b.name,b.id??func()??func1()?? 運行結(jié)果:
python 24
python 123456
func() is called!
func1() is called!
?
[python]?view plaincopy
__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?called!'??def?func1():??????print?'func1()?is?called!'?? [python]?view plaincopy
from?kk?import?*??a=A('python','24')??print?a.name,a.age??func()?? ?
運行結(jié)果:
python 24
func() is called!
[python]?view plaincopy
def?func():?????print?'func()?is?called!'????????def?_func():?????print?'_func()?is?called!'????????def?__func():????print?'__func()?is?called!'?? ?
[python]?view plaincopy
from?kk?import?*??func()?? 運行結(jié)果:
func() is called!
?
[python]?view plaincopy
__all__=('func','__func','_A')???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!'??? ?
?
[python]?view plaincopy
from?kk?import?*??????func()????__func()?a=_A('python')?print?a.name?? ?
運行結(jié)果:
func() is called!
__func() is called!
python
?
[python]?view plaincopy
def?func():??????print?'func()?is?called!'????????def?_func():??????print?'_func()?is?called!'????????def?__func():??????print?'__func()?is?called!'?? [python]?view plaincopy
from?kk?import?func,_func,__func??func()??_func()?__func()? 運行結(jié)果:
func() is called!
_func() is called!
__func() is called!
?
?
[python]?view plaincopy
def?func():??????print?'func()?is?called!'????????def?_func():??????print?'_func()?is?called!'????????def?__func():??????print?'__func()?is?called!'?? [python]?view plaincopy
import?kk??kk.func()??kk._func()?kk.__func()? 運行結(jié)果:
func() is called!
_func() is called!
__func() is called!
?
[python]?view plaincopy
import?sys????__all__?=?["func"]????def?func():??????print?'func()?is?called!'?? [python]?view plaincopy
from?kk?import?*????func()?? 運行結(jié)果:
func() is called!
如果一個模塊需要暴露的接口改動頻繁,__all__ 可以這樣定義:
__all__ = [
? ? "foo",
? ? "bar",
? ? "egg",
]
最后多出來的逗號在 Python 中是允許的,也是符合 PEP8 風格的。
?
模塊中不使用__all__屬性,則導入模塊內(nèi)的所有公有屬性,方法和類 。
模塊中使用__all__屬性,則表示只導入__all__中指定的屬性,因此,使用__all__可以隱藏不想被import的默認值。
__all__變量是一個由string元素組成的list變量。
它定義了當我們使用 from <module> import * 導入某個模塊的時候能導出的符號(這里代表變量,函數(shù),類等)。
from <module> import * 默認的行為是從給定的命名空間導出所有的符號(當然下劃線開頭的變量,方法和類除外)。
需要注意的是 __all__ 只影響到了 from <module> import * 這種導入方式,
對于 from <module> import <member> 導入方式并沒有影響,仍然可以從外部導入。
?
(完)
轉(zhuǎn)載于:https://www.cnblogs.com/eternal1025/p/8531975.html
總結(jié)
以上是生活随笔為你收集整理的python模块中的__all__属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。