Pythonモジュールの__all__は、次のようにモジュールのインポートを制限するために使用されます。frommodule import *
このとき、インポートしたモジュールが__all__属性を定義している場合は、__ all__で指定した属性、メソッド、クラスのみをインポートできます。定義していない場合は、モジュール内のすべてのパブリック属性、メソッド、クラスがインポートされます。
1.例1
#bb.py クラスA(): def __init __(self、name、age): self.name = name self.age = age クラス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()が実行されます! func1()が実行されます!注:
由于bb.py中没有定义__all__属性,所以导入了bb.py中所有的公有属性
2.实例2
#bb.py __all __ =( 'A'、 'func') クラスA(): def __init __(self、name、age): self.name = name self.age = age クラス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) #func1()#
NameError: name 'B' is not defined
#
NameError: name 'func1' is not defined
実行結果:
zhansan 18
func()が実行されます!
注:
bb.pyでは__all __ =( 'A'、 'func')が使用されるため、他のモジュールがこのモジュールをインポートする場合、インポートできるのは__all__のみです変数、メソッド、クラス
3.实例3
#bb.py DEF FUNC():#publicモジュール内のメソッドprint'func ()で実行される'! DEF _func(): #protectedモジュール内のメソッドprint'_func()を実行している!' DEF __func():#モジュール内のプライベートメソッド print '__ func()が実行されます!'
#test_bb.py
from bb import * #このメソッドは、パブリック属性、メソッド、およびクラスのみをインポートできます[シングルアンダースコア(保護)またはダブルアンダースコア(プライベート)で始まるプロパティ、メソッド、およびクラスはインポートできません]
func()
#_func()
#__ func()
実行結果:
func()が実行されます!
注:
from bb import * -このメソッドは、パブリック属性、メソッド、およびクラスのみをインポートできます[単一のアンダースコア(保護)または二重のアンダースコアではインポートできません最初の属性、メソッド、およびクラス(プライベート)]
_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()が実行されます! __ func()が実行されます! zhangsan 注意:放入__all__中所有属性均可导入,即使是以下划线开头 f
unc1() #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 ()が実行されます! ' def _func(): print'_func()が実行されます! ' def __func(): print '__ func()が実行されます!'
#test_bb.py BB輸入FUNC、_func、__ FUNCから#可以通过这种方式导入public,protected,private
FUNC() _func() __func() :実行結果 FUNC()実行されます! _func()実行されます! __func()の実行です! 注: _func()が、__func ()は "protected , private"
権限に属しますが、このメソッドを使用すると、直接インポートしてアクセスできます 。6。例6
#bb.py def func():print'func ()が実行されます! ' def _func(): print'_func()が実行されます! ' def __func(): print '__ func()が実行されます!'
#test_bb.py import bb#可以通过这种方式导入public,protected,private
bb.func() bb._func() bb .__ func() 実行結果: func()が実行されます! _func()が実行されます! __ func()が実行されます! 注: モジュールImportをインポートできますモジュールにアクセスし、module.XXメソッドを使用してアクセスします。」public,protected,private"权限的内容