测试 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.
我有一个 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) ofclassinfo
. A class is considered a subclass of itself.classinfo
may be a tuple of class objects or a Union Type, in which case returnTrue
if class is a subclass of any entry inclassinfo
. In any other case, aTypeError
exception is raised.