仅提供 python 包中的一部分功能
make available only a subset of functions in python package
我目前正在为 python 创建一个程序包,但我想只允许用户访问此程序包中定义的一组特定功能。假设结构文件如下:
my_package/
__init__.py
modules/
__init__.py
functions.py
在functions.py
中,有几个函数如下(这些都是愚蠢的例子):
def myfunction(x):
return my_subfunction1(x) + my_subfunction2(x)
def my_subfunction1(x):
return x
def my_subfunction2(x):
return 2*x
我希望用户能够导入 my_package
并直接访问 myfunction
,但不能导入 my_subfunction1
和 my_subfunction2
。例如,假设只有 myfunction
对用户有用,而子功能只是中间计算。
import my_package
a=my_package.myfunction(1) #should return 3
b=my_package.my_subfunction1(1) # should returns an error, function does not exist
我可以想出两种方法来解决我的问题,方法是将以下行添加到 my_package/
内的 __init__.py
文件中
1/from modules.functions import myfunction
2/ from modules.functions import *
,并用前导下划线重命名子函数以将它们从加星标的导入中排除,即:
_my_subfunction1
和 _my_subfunction2
到目前为止,这两种技巧似乎都很有效。
我的问题是:这是正确的 "pythonic" 方法吗?哪一个更好 ?如果其中 none 个是好的方法,我应该如何重写它?
感谢您的帮助。
我相信你应该看看 __all__
变量。
在你的情况下,只需设置,在你__init__.py
:
__all__ = ['myfunction']
我目前正在为 python 创建一个程序包,但我想只允许用户访问此程序包中定义的一组特定功能。假设结构文件如下:
my_package/
__init__.py
modules/
__init__.py
functions.py
在functions.py
中,有几个函数如下(这些都是愚蠢的例子):
def myfunction(x):
return my_subfunction1(x) + my_subfunction2(x)
def my_subfunction1(x):
return x
def my_subfunction2(x):
return 2*x
我希望用户能够导入 my_package
并直接访问 myfunction
,但不能导入 my_subfunction1
和 my_subfunction2
。例如,假设只有 myfunction
对用户有用,而子功能只是中间计算。
import my_package
a=my_package.myfunction(1) #should return 3
b=my_package.my_subfunction1(1) # should returns an error, function does not exist
我可以想出两种方法来解决我的问题,方法是将以下行添加到 my_package/
__init__.py
文件中
1/from modules.functions import myfunction
2/ from modules.functions import *
,并用前导下划线重命名子函数以将它们从加星标的导入中排除,即:
_my_subfunction1
和 _my_subfunction2
到目前为止,这两种技巧似乎都很有效。
我的问题是:这是正确的 "pythonic" 方法吗?哪一个更好 ?如果其中 none 个是好的方法,我应该如何重写它?
感谢您的帮助。
我相信你应该看看 __all__
变量。
在你的情况下,只需设置,在你__init__.py
:
__all__ = ['myfunction']