python - 在 Python 中,为什么 isinstance 函数说 datetime 是 datetime.date 的一个实例?

标签 python django datetime timezone isinstance

问题是 isinstance 函数表示 datetime.datetime 实例也是 datetime.date 的实例

为什么?有道理吗?

Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> d = datetime.datetime(2014, 4, 30, 15, 9, 4, 218466)
>>> isinstance(d, datetime.datetime)
True
>>> isinstance(d, datetime.date)
True

这使得 Django 1.4.10(我没有检查其他版本)错误地引发一个 RuntimeWarning 说一些完美的时区感知日期时间不是,因为有一条规则(here)说日期实例总是幼稚的。该警告在 django/db/models/fields/init.py 的第 759 行中发出。这可能是由于对“日期类型的对象总是天真”这句话的误解,他们应该使用 type 函数而不是使用 insinstance 来比较检查类型(或者更好的是,使用 django.utils.timezone.is_aware 函数)。

那么这是一个 Django 错误,还是错误在于 python isinstance 函数的行为?或两者?还是只有我?

>>> from django.utils.timezone import is_aware, utc
>>> d = datetime.datetime(2014, 4, 30).replace(tzinfo=utc)
>>> is_aware(d)
True
>>> isinstance(d, datetime.date)
True

最佳答案

>>> issubclass(datetime.datetime, datetime.date)
True

datetimedate 的子类,因此所有 datetime 也是 date

我不确定 Django 的交易是什么。可以说所有不是 datetimedate 都是幼稚的,但我不确定它是否确实如此。

关于python - 在 Python 中,为什么 isinstance 函数说 datetime 是 datetime.date 的一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395651/

相关文章:

python - tensorflow: "tf.gfile.GFile"中有问题, "' utf- 8' codec can' t 解码...”

Django 如何仅将 example.com 重定向到 https 并将 *.example.com 重定向到 http?

ios - 从字符串时间 4 :01 to 3:51 in swift 开始递减 int

python - 在Python中以AM/PM格式显示特定时区的unix时间

python - 判断是否有两个相同的字符相邻

python - 概率算法

python - 类型错误 : 'DeferredAttribute' object is not iterable

python - <model>_set 在我的 Django 模型中来自哪里?

php - 将月、年转换为 YYYY-MM-DD

python - 使用python-keycloak登录keycloak后如何获取 token