Python 我需要直接导入子模块吗?
假设我有一个模块Python 我需要直接导入子模块吗?,python,import,Python,Import,假设我有一个模块foo和一个子模块foo.bar。如果我想使用foo.bar中的方法,我需要直接导入foo.bar,还是导入foo就足够了 例如,以下内容会引发错误: import foo foo.bar.my_method() 以及以下工作: import foo.bar foo.bar.my_method() 但我不确定这是否是通常需要的,或者我的代码本身是否有问题。(我认为直接导入子模块通常是必要的……但我可以发誓,我看到的代码不是直接导入的,仍然可以正常工作。) 如果我想使用fo
foo
和一个子模块foo.bar
。如果我想使用foo.bar
中的方法,我需要直接导入foo.bar
,还是导入foo
就足够了
例如,以下内容会引发错误:
import foo
foo.bar.my_method()
以及以下工作:
import foo.bar
foo.bar.my_method()
但我不确定这是否是通常需要的,或者我的代码本身是否有问题。(我认为直接导入子模块通常是必要的……但我可以发誓,我看到的代码不是直接导入的,仍然可以正常工作。)
如果我想使用foo.bar
中的方法,我需要直接导入foo.bar
,还是导入foo
就足够了
您需要显式导入子模块。执行import foo.bar
将自动导入父模块foo
,必要时†绑定名称foo
,但反之不成立
但我可以发誓,我看到的代码不是直接导入的,仍然可以正常工作
对。有时,访问子模块时不需要显式导入。当父模块本身导入子模块时,就会发生这种情况。除非有文档记录,否则不要依赖它,因为它可能是一个实现细节,在库版本升级后可能会在没有警告的情况下更改
作为演示这两种行为的流行库的示例,请看requests==2.18.4
。此软件包包含名为会话
和帮助
(以及其他)的子模块。导入请求
将使请求。会话
隐式可用,而请求。帮助在显式导入之前将不可用。当包init的源代码被执行时,您会发现,但是help
子模块没有
†这很有意义,因为后续使用foo.bar
需要对现有foo
对象进行属性访问。请注意,from foo.bar import something
不会绑定名称foo
也不会绑定foo.bar
,尽管这两个模块foo
和foo.bar
都被导入并缓存到sys.modules
中 哦,非常有帮助,谢谢!在中,如果这些导入未直接用于\uuuu init\uuuuuuuuuuuuuuuuupy
文件中,那么从.sessions导入session,session
的原因是什么?只是为了使导入requests.sessions
不是绝对必要的?这可能是一种方便-将名称向上拉到父命名空间中。库用户现在可以从requests import Session编写导入语句,该语句较短,但相当于requests.sessions import Session
。