带有日期的python datetime实例检查返回true

2024-03-28 23:34:56 发布

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

我有两个对象,一个是datetime,另一个是date对象。当我想使用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

Tags: 对象fromimportfalsetrue类型todaydatetime
2条回答

datetime类是date的一个子类

Python库创建此继承关系,以便您可以在需要date的地方使用datetime。其基本原理是datetime对象包含一个日期。如果忽略时间或使用固定时间(如午夜),则将其用作date对象是有意义的

documentation提到了类层次结构:

Subclass relationships:

object
    timedelta
    tzinfo
        timezone
    time
    date
        datetime

Why datetime object instance check with date returning true

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

>>> from datetime import datetime, date

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

>>> issubclass(datetime, date)
True

相关问题 更多 >