我有一个名为core
的模块,其中包含许多python文件。
如果我这样做:
from core.curve import Curve
__init__.py
会被调用吗?我可以将适用于所有核心文件的import语句移动到__init__.py
以保存重复吗?什么应该进入__init__.py
?
答案 0 :(得分:1)
我有一个名为core的模块,其中包含许多python文件。
如果它包含python文件,它不是一个模块,它是一个包含python文件的目录 - 如果它包含一个__init__.py
文件,最终是一个包。
如果我这样做:
from core.curve import Curve
会__init__.py
被召唤吗?
从来没有"叫" - 它不是一个函数 - 但是它会在第一次在一个进程中导入包或其中一个子模块时加载。然后将其存储在sys.modules
中,随后的导入将在那里找到它。
我可以将适用于所有核心文件的导入语句移动到 init .py中以保存重复吗?
不。命名空间是每个模块,而不是每个包。无论如何,这将是一个非常糟糕的主意,你的名字和#34;重复自己"在这种情况下,在维护代码方面是一个真正的帮助(显式导入意味着你不知道哪个符号来自哪个模块)。
init .py?
应该包含哪些内容
从技术上讲,你实际上可以在你的__init__.py
文件中放置任何你想要的东西,但通常它们只是空的。一个已知的用例是using it as a facade用于包的子模块,为基于当前平台或某些环境变量等的公共API选择具体实现...
哦,是的:它也是一个添加关于你的包(版本,作者等)的元信息的好地方。
答案 1 :(得分:0)
每次从该模块导入任何东西时都会运行__init__.py吗?
根据https://github.com/aNNiMON/Lightweight-Stream-API大多数情况是,它是。
答案 2 :(得分:0)
您可以添加要在目录中使用的所有功能
__init__.py
在此from .curve import Curve
from .some import SomethingElse
中添加类和函数引用,如
from core import Curve
以及你想要的用户你的班级只需像
那样引用它text='''
printf "Proxy authentication failed.
read -s -p "Enter Password to try again: " mypassword
printf "Proxy authentication succeeded
'''