Python 导入语句

3 投票
3 回答
2511 浏览
提问于 2025-04-16 22:51

我开始学习Python大约一个月了,遇到了一些想更好理解的事情。这和导入模块有关。我有一个模块:

root.core.connectivity

在这个模块里,我定义了一个叫做Connectivity的类。这个模块还有一个__main__部分,主要是为了测试(不太确定这是否有影响)。

现在如果我这样做:

from root.core.connectivity import Connectivity as class_name

这样是没问题的,但如果我尝试:

import root.core.connectivity.Connectivity as class_name

这就会失败,错误信息是:

ImportError: No module named Connectivity

所以我想问的是,为什么会失败,这两种写法有什么不同。

祝好,

Bogdan

3 个回答

0

root.core.connectivity 是一个模块,而 root.core.connectivity.Connectivity 是一个类。

要理解 import 和 from ... import 之间的区别,你可以查看这个链接,里面有详细的说明:

import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )*
| "from" relative_module "import" identifier ["as" name]
  ( "," identifier ["as" name] )*
| "from" relative_module "import" "(" identifier ["as" name]
  ( "," identifier ["as" name] )* [","] ")"
| "from" module "import" "*"

比如,你在使用 'import' 时是针对模块,而 'from ... import' 是用来引入具体的东西,比如类、变量和其他模块。

所以在你的第二种情况下,你可以这样做:

import root.core.connectivity as conn
class_name = conn.Connectivity
3

Connectivity是一个在模块中定义的类。我们可以通过导入模块来使用它,而使用from-import的方式可以直接导入模块中的某个类。

这个链接解释得很好:http://effbot.org/zone/import-confusion.htm

5

import 是用来引入一个模块的。from X import Y 是从模块 X 中引入 Y 这个元素。Connectivity 不是一个模块。

撰写回答