【发布时间】: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也适用于子类。 -
鸭子打字有什么问题?
-
没什么,这就是我所缺少的。你们是读标准库还是随便找东西呢
-
isinstance和type不在标准库中,它们是 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