python datetime实例检查日期返回true

new*_*bie 4 python datetime isinstance

我有 2 个对象,一个是日期时间,另一个是日期对象。当我想使用 isinstance (python 的首选方式)检查对象的类型时,我得到了一些荒谬的结果

>>> from datetime import date, datetime
>>> a=date.today()
>>> b=datetime.now()
>>> isinstance(a, date)
True
>>> isinstance(a, datetime)
False
>>> isinstance(b, date)
True       # this should be False
>>> isinstance(b, datetime)
True
Run Code Online (Sandbox Code Playgroud)

为什么 datetime 对象实例检查 date 返回 true?目前我正在使用type来解决这个问题,但是没有解决方法吗?

>>> type(a) == date
True
>>> type(a) == datetime
False
>>> type(b) == date
False
>>> type(b) == datetime
True
Run Code Online (Sandbox Code Playgroud)

yed*_*tko 5

为什么 datetime 对象实例检查日期返回 true

没有解决方法,它按预期工作,因为datetimeis 的子类dateisinstance返回True子类,如文档所述。我认为使用type()是你在这里的唯一方法。

>>> from datetime import datetime, date

>>> datetime.__mro__
(datetime.datetime, datetime.date, object)

>>> issubclass(datetime, date)
True
Run Code Online (Sandbox Code Playgroud)

  • 该文档显示了类似的信息:https://docs.python.org/3/library/datetime.html(搜索“子类关系”)。 (2认同)