在Python模块中检查类型是否存在

4
什么是最具Python风格的方式来确定一个对象的类型是否包含在特定模块中?
例如,假设我想从datetime模块匹配date,time和datetime类。
import datetime
mylist = [obj1, obj2, obj3, ...]
for obj in mylist:
    if type(obj) in [datetime.datetime, datetime.time, datetime.date]:
        #Do thing

对于每个循环创建三个匹配实例看起来有些愚蠢。是否有更简单的方法来表达“如果type(obj)在某个模块中”?

1个回答

3

isinstance() 可以检查多个类型:

isinstance(object, classinfo)

如果 object 是一个 classinfo 类型的实例,或者是该类型(直接、间接或虚拟)的子类,则返回 true。如果 object 不是给定类型的对象,则该函数始终返回 false。 如果 classinfo 是类型对象的元组(或递归地是其他这样的元组),则当 object 是任何类型的实例时都返回 true。如果 classinfo 不是类型或类型元组及此类元组,则会引发 TypeError 异常。

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

1
在这种特定情况下,甚至可以只检查 datetime.datedatetime.time,因为 datetime.datetime 的父类是 datetime.date - L3viathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接