python“import datetime”v.s.“从datetime导入datetime”

2024-09-29 21:58:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在我的进口声明中,我有以下内容:

from datetime import datetime
import datetime

我得到以下错误:

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

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

import datetime
from datetime import datetime

我得到以下错误:

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

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

import datetime

我得到以下错误:

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

这是怎么回事,我怎么才能让两个人都工作呢?谢谢你。谢谢您。


Tags: nofromimport脚本todaydatetimedateobject
3条回答

您的问题是,有些代码期望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表示类都没有问题。

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

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

你也可以这样做:

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

在这里,您只导入所需的名称(日期时间和日期类型),然后直接导入它们,这样就根本不需要引用模块本身。

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

还要注意,如果确实导入模块名称本身,则可以缩短名称以便于键入:

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

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

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

import datetime

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

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

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

from datetime import date, datetime

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

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

相关问题 更多 >

    热门问题