簡體   English   中英

在Python中,為什么isinstance函數說datetime是datetime.date的實例?

[英]In Python, why isinstance function says that a datetime is an instance of datetime.date?

問題是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,因為某些規則( 此處 )說日期實例始終是幼稚的,因此它並不完全了解時區。 該警告在django / db / models / fields / init .py,第759行中提出。這可能是由於對短語“日期類型的對象總是天真”的誤解所致,他們應該使用類型函數比較檢查類型。而不是使用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都是幼稚的,但是我不確定這是否是實際的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM