测试 python class 是否为 str、list 等

Test if python class is str, list, etc

我有一个 class 列表:

[<class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'datetime.date'>, <class 'decimal.Decimal'>, <class 'decimal.Decimal'>, <class 'str'>, <class 'datetime.date'>, <class 'decimal.Decimal'>, <class 'decimal.Decimal'>, <class 'decimal.Decimal'>]

我想做一个类似于 isinstance() 的布尔测试:

[isinstance(x, str) for x in l]

但是 isinstance() 只接受对象而不是 classes.

我想要的结果,对于上面的列表来测试 class 是否是一个字符串,应该是这样的:

[True, True, True, True, False, False, False, True, False, False, False, False]

使用==运算符:

[x == str for x in l]

由于您有 类 的列表,因此您需要使用 issubclass rather than isinstance:

[issubclass(x, str) for x in l]

来自 Python 文档:

issubclass(class, classinfo)

Return True if class is a subclass (direct, indirect, or virtual) of classinfo. A class is considered a subclass of itself. classinfo may be a tuple of class objects or a Union Type, in which case return True if class is a subclass of any entry in classinfo. In any other case, a TypeError exception is raised.