是否可以避免导入from file import function
的文件?
有人告诉我,我需要将下划线作为前缀,例如:_function
,但不起作用。
由于遗留代码,我使用的是Python 2.6。
答案 0 :(得分:3)
有一些方法可以阻止导入,但它们通常都是黑客攻击,你想要避免它们。通常的方法是使用下划线:
def _function():
pass
然后,当您导入时,
from my_module import *
您会注意到_function
未已导入,因为它以下划线开头。但是,您始终可以这样做:
# In Python culture, this is considered rude
from my_module import _function
但你不应该这样做。只是不要这样做,你会没事的。 Python的态度是我们都是成年人。还有很多其他事情你不应该做的更糟糕,比如
import my_module
# Remove the definition for _function!
del my_module._function
答案 1 :(得分:2)
Python中有无隐私。只有约定管理外部代码应该考虑公开访问和使用的内容。
首次导入模块,触发模块对象的创建以及模块中所有顶级代码的执行。模块对象包含全局命名空间,该代码的结果已运行。
因为Python是动态的,所以你总能反省模块命名空间;您可以看到定义的所有名称,这些名称引用的所有对象,您可以访问和更改所有内容。如果这些名称以下划线开头,则无关紧要。
因此,对名称使用前导_
下划线的唯一原因是文档该名称是模块实现的内部,并且外部代码不应该依赖在该名称中存在于未来版本中。 from module import *
语法将仅因此原因忽略此类名称。但无论如何,你无法阻止一个坚定的程序员访问这样的名字。他们只是冒着自己的风险这样做,你不应该让他们远离这种访问。
如果您只有初始化模块所需的功能或其他对象,您当然可以在最后删除这些名称。