首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从datetime导入datetime导入datetime“v.s.”

从datetime导入datetime导入datetime“v.s.”
EN

Stack Overflow用户
提问于 2013-03-30 00:42:23
回答 6查看 140.2K关注 0票数 55

我有一个脚本,它需要在脚本中的不同行执行以下内容:

代码语言:javascript
复制
today_date = datetime.date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

在我的import语句中,我有以下内容:

代码语言:javascript
复制
from datetime import datetime
import datetime

我得到以下错误:

代码语言:javascript
复制
AttributeError: 'module' object has no attribute 'strp'

如果我将import语句的顺序更改为:

代码语言:javascript
复制
import datetime
from datetime import datetime

我得到以下错误:

代码语言:javascript
复制
AttributeError: 'method_descriptor' object has no attribute 'today'

如果我再次将import语句更改为:

代码语言:javascript
复制
import datetime

我得到以下错误:

代码语言:javascript
复制
AttributeError: 'module' object has no attribute 'strp'

这是怎么回事,我怎么才能让两者都正常工作呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-30 00:48:58

您的问题是,有些代码希望datetime是对datetime模块的引用,而另一些代码希望datetime是对datetime类的引用。显然,它不可能两者兼而有之。

当你这样做的时候:

代码语言:javascript
复制
from datetime import datetime
import datetime

首先将datetime设置为对类的引用,然后立即将其设置为对模块的引用。当你反过来做的时候,它是一样的,但它最终是一个对类的引用。

您需要重命名其中一个引用。例如:

代码语言:javascript
复制
import datetime as dt
from datetime import datetime

然后,您可以将引用该模块的datetime.xxxx表单中的引用更改为dt.xxxx

或者只使用import datetime,并将所有引用更改为使用模块名称。换句话说,如果某个东西只是说datetime(...),那么您需要将引用更改为datetime.datetime

不幸的是,Python的库中有相当多这样的东西。如果它们在PEP 8中遵循自己的命名准则,那么datetime类将被命名为Datetime,使用datetime表示模块,使用Datetime表示类是没有问题的。

票数 83
EN

Stack Overflow用户

发布于 2013-03-30 00:44:10

不能同时使用这两个语句;datetime 模块包含datetime 类型。您自己的模块中的本地名称datetime只能引用其中一个。

只使用import datetime,然后确保始终使用datetime.datetime来引用包含的类型:

代码语言:javascript
复制
import datetime

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

现在datetime是模块,您可以通过它引用所包含的类型。

或者,从模块导入所需的所有类型:

代码语言:javascript
复制
from datetime import date, datetime

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

这里的datetime是模块中的类型。date是另一种类型,来自同一模块。

票数 34
EN

Stack Overflow用户

发布于 2013-03-30 00:49:13

datetime是一个包含也称为datetime的类型的模块。您似乎想同时使用这两个名称,但您试图使用相同的名称来引用这两个名称。类型和模块是两个不同的东西,您不能在程序中使用名称datetime来同时引用它们。

如果需要使用模块中除datetime类型之外的任何内容(显然是这样),则需要使用import datetime导入模块。然后,您可以将"date“类型称为datetime.date,将datetime类型称为datetime.datetime

你也可以这样做:

代码语言:javascript
复制
from datetime import datetime, date
today_date = date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

在这里,您只导入所需的名称( datetime和date类型),并直接导入它们,因此根本不需要引用模块本身。

最终,您必须决定需要使用模块中的哪些名称,以及如何最好地使用它们。如果您只使用模块中的一两个内容(例如,仅使用datedatetime类型),则可以直接导入这些名称。如果要使用很多东西,最好导入模块并使用点语法访问其中的东西,以避免使用特定于日期的名称弄乱全局名称空间。

另请注意,如果您确实导入了模块名称本身,则可以缩短名称以简化键入:

代码语言:javascript
复制
import datetime as dt
today_date = dt.date.today()
date_time = dt.datetime.strp(date_time_string, '%Y-%m-%d %H:%M')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15707532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档