使用 "import" 与 "from X import"

Using "import" vs. "from X import"

我正在研究 Head First Python,这里有一个例子:

from datetime import datetime

odds = [  1,  3,  5,  7,  9, 11, 13, 15, 17, 19,
     21, 23, 25, 27, 29, 31, 33, 35, 37, 39,
     41, 43, 45, 47, 49, 51, 53, 55, 57, 59 ]

right_this_minute = datetime.today().minute

#if right_this_minute in odds:
    #print("This minute seems a little odd.")
#else:
    #print("Not an odd minute.")

现在如果我用 "import datetime" 代替 "from datetime import datetime",解释器会给我一个错误:

right_this_minute = datetime.today().minute AttributeError: module 'datetime' has no attribute 'today'

我不明白为什么 "from datetime import datetime" 有效,但 "import datetime" 无效。我已经浏览了一些关于此的 Whosebug 问答,但我显然遗漏了一些东西。

如有任何建议,我们将不胜感激。

首先,有两个"things"叫做datetime:模块和模块定义的class

您使用的两个导入选项具有不同的行为。

当你运行:

from datetime import datetime

第一个是模块,第二个是class。 Python 从模块中只导入一个 class (datetime)。从此,Python就理解为datetime指的是class。

当你运行:

import datetime

您导入了整个模块,因此 Python 将理解 datetime 为模块。要访问 class datetime,您需要使用 datetime.datetime.