[英]Importing a function/class from a Python module of the same name
我有一个Python包mymodule
和一个子包utils
(即一个子目录,其中包含每个都带有一个函数的模块)。 这些函数与它们所在的文件/模块具有相同的名称。
我希望能够访问如下功能,
from mymodule.utils import a_function
但奇怪的是,有时我可以使用上面的表示法导入函数,但有时我不能。 我无法弄清楚为什么(最近,例如,我重命名了一个函数及其所在的文件,并在utils.__init__.py
文件中反映了这个重命名,但它不再作为函数导入(而是作为一个函数)我的一个脚本中的模块)。
utils.__init__.py
读取类似的东西,
__all__ = ['a_function', 'b_function' ...]
from a_function import a_function
from b_function import b_function
...
mymodule.__init__.py
没有引用utils
想法?
您的utils函数是否需要导入其他utils函数? (或导入导入其他utils函数的其他模块)。 例如,假设a_function.py包含“from mymodule.utils import b_function”。 这是你的utils.py,附带一些额外的评论:
# interpreter is executing utils.py
# Right now, utils.a_function and utils.b_function are modules
# The following line executes the a_function module,
# then rebinds a_function to a_function.a_function
from a_function import a_function
# The following line executes the b_function module,
# then rebinds b_function to b_function.b_function
from b_function import b_function
当utils.py首次导入a_function模块时,utils.b_function是一个模块而不是一个函数。 在执行最后一行之前声明“from mymodule.utils import b_function”的任何模块最终将引用b_function模块而不是b_function函数。
一般来说,我发现from somemodule import something
成语对于任何大型项目都充满了危险。 它对于短脚本很有用,但是一旦开始引入循环导入依赖项,就会遇到问题,需要注意使用它的位置。
作为安全和节省输入之间的妥协,我将使用from mymodule import utils
然后调用utils.a_function()
。 这样,你总是会得到绑定到对象utils.a_function
现在 ,而不是无论发生在绑定到utils.a_function
导入过程中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.