2016-01-24 44 views
4

确定某个对象的类型是否包含在特定模块中的Pythonic方法最多?在Python模块中检查类型是否存在

例如,假设我想匹配日期时间模块中的日期,时间和日期时间类。

import datetime 
mylist = [obj1, obj2, obj3, ...] 
for obj in mylist: 
    if type(obj) in [datetime.datetime, datetime.time, datetime.date]: 
     #Do thing 

它似乎愚蠢地创建三个匹配的每个循环的实例。有没有更简单的方法来说“如果在某个模块中键入(obj)”?

回答

3

isinstance()可以检查针对多种类型:

isinstance(object, classinfo)

返回真,如果该对象参数是classinfo参数的实例,或其(直接,间接或虚拟的)亚类的。如果object不是给定类型的对象,则该函数总是返回false。 如果classinfo是类型对象的元组(或递归地,其他这样的元组),则返回true,如果object是任何类型的实例。如果classinfo不是类型和这些元组的类型或元组,则会引发TypeError异常。

if isinstance(obj, (datetime.datetime, datetime.time, datetime.date)): 
+1

在这种特殊情况下,它甚至可能只是检查'datetime.date'和'datetime.time'因为'datetime.datetime'的父类是'datetime.date'。 – L3viathan

相关问题