我有一个脚本,它需要在脚本中的不同行执行以下内容:
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'这是怎么回事,我怎么才能让两者都正常工作呢?
发布于 2013-03-30 00:48:58
您的问题是,有些代码希望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表示类是没有问题的。
发布于 2013-03-30 00:44:10
不能同时使用这两个语句;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是另一种类型,来自同一模块。
发布于 2013-03-30 00:49:13
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')在这里,您只导入所需的名称( datetime和date类型),并直接导入它们,因此根本不需要引用模块本身。
最终,您必须决定需要使用模块中的哪些名称,以及如何最好地使用它们。如果您只使用模块中的一两个内容(例如,仅使用date和datetime类型),则可以直接导入这些名称。如果要使用很多东西,最好导入模块并使用点语法访问其中的东西,以避免使用特定于日期的名称弄乱全局名称空间。
另请注意,如果您确实导入了模块名称本身,则可以缩短名称以简化键入:
import datetime as dt
today_date = dt.date.today()
date_time = dt.datetime.strp(date_time_string, '%Y-%m-%d %H:%M')https://stackoverflow.com/questions/15707532
复制相似问题