我有一个脚本,需要在脚本中的不同行执行以下操作:

today_date = datetime.date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

在我的import陈述我有以下内容:

from datetime import datetime
import datetime

我会收到以下错误:

AttributeError: 'module' object has no attribute 'strp'

如果我改变了import语句:

import datetime
from datetime import datetime

我会收到以下错误:

AttributeError: 'method_descriptor' object has no attribute 'today'

如果我再次更改import对:

import datetime

我会收到以下错误:

AttributeError: 'module' object has no attribute 'strp'

这里发生了什么,我如何工作?

答案

您的麻烦是您有一些期望的代码datetime是对datetime 模块 和其他期望的代码datetime是对datetime *班级。*显然,这不可能两者兼而有之。

当您这样做时:

from datetime import datetime
import datetime

您是第一个设置datetime要成为对类的引用,然后立即将其设置为对模块的引用。相反,当您这样做时,它最终是对班级的引用。最后一项任务"获胜"。

您需要重命名以下参考文献之一。例如:

import datetime as dt
from datetime import datetime

然后,您可以以形式更改参考datetime.xxxx这是指模块dt.xxxx

否则只是import datetime并更改所有引用以使用模块名称。换句话说,如果只是说datetime(...)您需要将该引用更改为datetime.datetime

不幸的是,Python在其图书馆中有相当多的东西。如果他们遵循自己的命名指南PEP 8, 这datetime班级将被命名Datetime两者使用都没有问题datetime表示模块和Datetime是指班级。

来自: stackoverflow.com