我有一个如下所示的python目录。.在test.py中,我有a,b,c方法。
虽然导入测试我不希望用户导入c方法。一种方法是使c方法成为私有方法。无论如何,可以在__init__.py
或使用__import__
test
__init__.py
test.py
我发现stackoverflow中很少有解决方案无法实现这一目标。
谢谢。
答案 0 :(得分:1)
如果您正在寻找绝对的私有方法,那么python是您使用的错误语言-请访问Java或C / ++ /#或支持public
和{{1 }}。在python中,如果知道存在某种东西,那么无论它多么隐蔽,通常都可以访问该东西。
如果您只是想在用户导入模块时限制用户的便捷选项,那么您可以简单地在private
中选择性地包括或排除方法。说你有
__init__.py
test.py
并且您希望def a():
pass
def b():
pass
def c():
pass
和a
可以被用户访问,但b
不能访问,那么您可以这样做
c
__init__.py
并将文件夹导出为模块。现在,当用户这样做时
from .test import a, b
他们只能访问 import test
末尾命名空间中的内容(也就是说,他们可以获取__init__.py
和test.a
,但是test.b
不存在)。由于您从未在test.c
中包含c
,因此它不会出现在此处。
请注意,__init__.py
仍然可以通过操作来访问
c
直接访问源文件。
或者,您可以基于每个文件指定一个 名称,可以使用内置变量from test.test import c
立即访问这些名称。以下将与上面的代码具有相同的效果:
__all__
test.py
... __all__ = ['a', 'b'] # note that 'c' is excluded
__init__.py