python 日期时间实例检查日期 returns 真

python datetime instance check with date returns true

我有 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

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

>>> type(a) == date
True
>>> type(a) == datetime
False
>>> type(b) == date
False
>>> type(b) == datetime
True

Why datetime object instance check with date returning true

没有解决方法,它按预期工作,因为 datetimedate 的子类,而 isinstance returns True 是子类,因为文档说。我认为使用 type() 是您在这里的唯一方法。

>>> from datetime import datetime, date

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

>>> issubclass(datetime, date)
True

datetime class 是 date 的子class。

Python 库创建了这种继承关系,因此您可以在需要 date 的地方使用 datetime。这样做的理由是 datetime 对象中包含一个日期。如果您忽略时间或使用固定时间(例如午夜),那么将其用作 date 对象是有意义的。

documentation 提到了 class 层级:

Subclass relationships:

object
    timedelta
    tzinfo
        timezone
    time
    date
        datetime