2024-03-29 10:09:59 发布
网友
如果我有一个python文件,名为“xtraimport.py“有了这个:
import os import sys def its_true(): return True
当我导入它时,它包含符号“os”和“sys”:
有没有办法消除名字空间的污染?我知道这些符号是在我的模块中导入的,但我不想把它们暴露给使用库的每个人。在
一种控制这一点的方法是将您的模块放入一个包中。在python路径上,创建xtraimport。在这个目录中放两个文件:(1)xtraimport.py和(2)__init__.py。对于__init__.py的内容,请使用:
xtraimport
xtraimport.py
__init__.py
from xtraimport import its_true
这样,只有its_true被直接暴露:
its_true
xtraimport的全部内容仍然可供愿意采取额外步骤的专用用户使用:
In [3]: dir(xtraimport.xtraimport) Out[3]: ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'its_true', 'os', 'sys']
容易些?可能没有。但如果你喜欢的话,这里有一个解决方案。在
import xtraimport import sys originalDir = dir(xtraimport) newDir = [x for x in originalDir if x not in sys.modules]
在这里查看更多关于sys.modules:sys.modules的详细信息
sys.modules
设置__all__可以指定希望模块的公共接口包含哪些名称。它实际上并不阻止其他人被访问,但它会影响from foo import *,pydoc,并且可能会影响自动完成,具体取决于自动完成软件。在
__all__
from foo import *
例如:
__all__ = ["my_function", "MyClass"]
一种控制这一点的方法是将您的模块放入一个包中。在python路径上,创建
xtraimport
。在这个目录中放两个文件:(1)xtraimport.py
和(2)__init__.py
。对于__init__.py
的内容,请使用:这样,只有
^{pr2}$its_true
被直接暴露:xtraimport
的全部内容仍然可供愿意采取额外步骤的专用用户使用:容易些?可能没有。但如果你喜欢的话,这里有一个解决方案。在
在这里查看更多关于
sys.modules
:sys.modules的详细信息设置
__all__
可以指定希望模块的公共接口包含哪些名称。它实际上并不阻止其他人被访问,但它会影响from foo import *
,pydoc,并且可能会影响自动完成,具体取决于自动完成软件。在例如:
__all__ = ["my_function", "MyClass"]
相关问题 更多 >
编程相关推荐