Pythonの使用__all__

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__中所有属性均可导入,即使是以下划线开头
  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__中,可以导入



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"权限的内容

おすすめ

転載: blog.csdn.net/weixin_45131345/article/details/111868252
おすすめ