Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有限制模块中的方法在python中导入的方法?_Python_Python 3.x_Python Module - Fatal编程技术网

是否有限制模块中的方法在python中导入的方法?

是否有限制模块中的方法在python中导入的方法?,python,python-3.x,python-module,Python,Python 3.x,Python Module,我有一个python目录,如下所示。。在test.py中,我有a、b、c方法 在导入测试时,我不希望用户导入c方法。一种方法是将c方法设置为私有。在uuu init_uuuuuuuuuuuuuuuuuuuuuuuu.py或使用uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__ 我在stackoverflow中看到了一些解决方案,但我没有办法做到这一点 谢谢。如果您正在寻找绝对私有的方法,那么python对您来说是错误的语言-请使用Java或C/++/或其他支持区分公共

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

在导入测试时,我不希望用户导入c方法。一种方法是将c方法设置为私有。在uuu init_uuuuuuuuuuuuuuuuuuuuuuuu.py或使用uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__

我在stackoverflow中看到了一些解决方案,但我没有办法做到这一点


谢谢。

如果您正在寻找绝对私有的方法,那么python对您来说是错误的语言-请使用Java或C/++/或其他支持区分公共和私有的语言。在python中,如果已知某个东西存在,那么不管它有多隐蔽,通常都可以访问该东西

如果您只是试图在用户导入您的模块时限制其方便的选项,那么您可以简单地选择在_init__; py.py中包含或排除方法。说你有

test.py

您希望用户可以访问a和b,但不希望用户可以访问c,那么您可以这样做

__初始值

并将文件夹导出为模块。现在,当用户

import test
他们只能在_init__u;py结束时访问命名空间中的内容,也就是说,他们可以获得test.a和test.b,但test.c不存在。由于您从未在_uinit__u; py.py中包含c,因此它不会出现在那里

注意,c仍然可以通过

from test.test import c
它直接访问源文件

或者,您可以通过使用内置变量uuu all_uuuu来指定每个文件中应该立即访问的名称。以下内容与上述代码具有相同的效力:

test.py

__初始值


导入c有什么问题?您可以选择要导入的内容,但如果您有3个以上的方法,这会有点乏味。我有一些代码要隐藏。Python中没有私有方法,如果有人能够导入您的模块,他们还可以打开Python文件,这意味着他们无论如何都可以访问代码。注意:在C和Java中,反射功能通常允许您访问任何东西,包括私有内容,这很不方便。它不是一个安全特性,它是为了缩小公共API的范围,但它就是这样。Python的不同之处在于,它决定隐私是一种约定,而当您可能真的需要绕过公共API时,却很难绕过它,这会使程序员变得幼稚。在C++中,你有原始内存访问,所以任何事情都是可以访问的,除非优化器优化它不存在。谢谢你的时间。但是使用all我们也可以直接访问它,但是把它放在init中要好得多
from .test import a, b
import test
from test.test import c
...
__all__ = ['a', 'b']  # note that 'c' is excluded
from test.py import *  # imports a and b, but not c