【问题标题】:what is the quickest way to check for type(datetime.date) python检查类型(datetime.date)python的最快方法是什么
【发布时间】:2016-02-09 16:06:40
【问题描述】:

我在检查 datetime.date 的类型时遇到了麻烦。我不知道在 python 中获得良好的类型检查是否很麻烦,或者我是否缺少某些东西:

In [14]: type(datetime.date)
Out[14]: type

In [15]: type(d)
Out[15]: datetime.date

In [16]: arbitrary = datetime.date(1990, 1, 1)

In [17]: type(arbitrary)
Out[17]: datetime.date

我想要一些比每次都需要在__init__ 内进行假约会更简单的方法

import datetime

class Month(object):

    def __init__(self, dateobj):
        if type(dateobj) == the type of datetime.date:
            we're good
        else:
            raise Exception('Please feed me a dateobj')

检查这些类型的最快方法是什么,因为基类的类型通常返回无用的type。谢谢

【问题讨论】:

  • isinstance 有什么问题?你也可以像type(datetime.datetime) -> type 建议的那样做type(d) == datetime.datetime。请注意,type(...) == 将检查完全匹配,而isinstance 也适用于子类。
  • 鸭子打字有什么问题?
  • 没什么,这就是我所缺少的。你们是读标准库还是随便找东西呢
  • isinstancetype 不在标准库中,它们是 builtins。熟悉内置函数是一大优势。
  • 你不需要获取类的类型,你需要实例的类型,对于普通类的实例来说就是类名。即你不做if type(dateobj) == the type of datetime.date你只做if type(dateobj) is datetime.date。 type() 返回元类,大部分是使用内置的type() 构造的,见docs.python.org/3/reference/datamodel.html#metaclasses

标签: python python-3.x datetime


【解决方案1】:

我使用isinstance 进行类型检查:

>>> import datetime
>>> isinstance('2016', datetime.datetime)
False
>>> today = datetime.datetime.now()
>>> isinstance(today, datetime.datetime)
True

【讨论】:

    【解决方案2】:

    用途:

    type(your_variable)
    

    或者如果你知道它应该是datetime.date:

    isinstance(your_variable, datetime.date)
    

    type 给你变量的类型,isinstance 返回TrueFalse。 示例:

    >>> from datetime import date
    >>> today = date.today()
    >>> type(today)
    <type 'datetime.date'>
    >>> isinstance(today, datetime.date)
    True
    

    【讨论】:

    • datetime.datetimedatetime.date 的子类,它可能有用也可能没有帮助。在该示例中,isinstance 将为日期和日期时间返回 true。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2012-05-21
    • 2011-07-13
    • 2010-09-27
    • 2014-01-28
    • 2020-01-17
    相关资源
    最近更新 更多