我有一个脚本,需要在脚本中的不同行执行以下操作:
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
只能引用其中一个仅使用
import datetime
,然后确保始终使用datetime.datetime
引用包含的类型:现在
datetime
是模块,您可以通过它引用包含的类型或者,从模块导入所需的所有类型:
这里
datetime
是模块中的类型date
是来自同一模块的另一种类型您的问题是有些代码期望
datetime
是对datetime
模块的引用,而其他代码期望datetime
是对datetime
类的引用<显然,不可能两者兼而有之当您这样做时:
首先将
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
您也可以这样做:
在这里,您只导入所需的名称(datetime和date类型),然后直接导入它们,这样就根本不需要引用模块本身
最终,您必须决定需要使用模块中的哪些名称,以及如何最好地使用它们。如果您仅使用模块中的一个或两个内容(例如,仅使用
date
和datetime
类型),则可以直接导入这些名称。如果您正在使用许多东西,那么最好导入模块并使用点语法访问其中的东西,以避免用特定于日期的名称混乱您的全局名称空间另外请注意,如果确实导入模块名称本身,则可以缩短名称以便于键入:
相关问题 更多 >
编程相关推荐