无论如何有限制从python导入模块中的方法吗?

时间:2019-12-13 02:49:13

标签: python python-3.x python-module

我有一个如下所示的python目录。.在test.py中,我有a,b,c方法。

虽然导入测试我不希望用户导入c方法。一种方法是使c方法成为私有方法。无论如何,可以在__init__.py或使用__import__

来实现
    test
     __init__.py
     test.py

我发现stackoverflow中很少有解决方案无法实现这一目标。

谢谢。

1 个答案:

答案 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__.pytest.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