python中__all__的作用

python中__all__的作用

   运维菜鸟     2021年2月20日 11:29     864    

__all__ 就是限制from <module> import *所导入的内容,对于 from <module> import <member> 导入方式并没有影响

from <module> import *导入的都是公有的。

示例1.

verify_all.py

class One:
   
def __init__(self, class_name):
       
self.class_name = class_name
   
def method_fun(self):
       
print("This class name is " + self.class_name)
class Two:
   
def __init__(self, class_name):
       
self.class_name = class_name
   
def method_fun(self):
       
print("This class name is " + self.class_name)

def fun_one(fun_name):
   
print("This fun name is " + fun_name)
def fun_two(fun_name):
   
print("This fun name is " + fun_name)

 

test_all.py

from verify_all import *

a = One(
"One")
b = Two(
"Two")

a.method_fun()
b.method_fun()

fun_one(
"fun_one")
fun_two(
"fun_two")

运行结果:

This class name is One

This class name is Two

This fun name is fun_one

This fun name is fun_two

这里并没有定义__all__所以可以将所有类、和函数导入使用文件中。

 

示例2.

verify_all.py中添加

__all__=['One','fun_one','fun_two']

执行结果:

Traceback (most recent call last):

  File "D:/project/python-test/templates/test_all.py", line 4, in <module>

    b = Two("Two")

NameError: name 'Two' is not defined

会提示Two,没有定义,其实就是没有导入进来。

 

示例3.

需要注意的是 __all__ 只影响到了 from <module> import * 这种导入方式,对于 from <module> import <member> 导入方式并没有影响,仍然可以从外部导入。

verify_all.py中添加

__all__=['One','fun_one','fun_two']

test_all.py中添加

from verify_all import Two

 

再次执行:

This class name is One

This class name is Two

This fun name is fun_one

This fun name is fun_two


文章评论

0

其他文章