pythonのモジュールの_all__ツールバーの

4733 ワード

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では許容され、PEP 8スタイルにも合っています.
モジュールで使用しない_all__プロパティを選択すると、モジュール内のすべての共通プロパティ、メソッド、クラスがインポートされます.
モジュールで使用_all__を選択します.all__で指定した属性を使用します.all__importされたくないデフォルト値を隠すことができます.
__all__変数はstring要素からなるlist変数です.from import*を使用してモジュールをインポートしたときにエクスポートできる記号(変数、関数、クラスなどを表す)を定義します.from import*のデフォルトの動作は、指定されたネーミングスペースからすべての記号をエクスポートします(もちろん、下線の先頭の変数、メソッド、クラスを除きます).注意が必要なのは_all__ from import*というインポート方式にのみ影響し、from importインポート方式には影響せず、外部からインポートできます.
(完)