我有一个脚本,需要在脚本中的不同行执行以下操作:
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
是指班级。