测试python类是不是为str、list等

Posted

技术标签:

【中文标题】测试python类是不是为str、list等【英文标题】:Test if python class is str, list, etc测试python类是否为str、list等 【发布时间】:2021-12-03 02:37:45 【问题描述】:

我有一个班级列表:

[<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() 只接受对象而不接受类。

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

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

【问题讨论】:

使用issubclass 而不是isinstance 对象。问题是 class str 不是 str 的实例;它是type 的一个实例。它是自己的子类,但是(如果您不担心子类化)您可以与 is 进行直接类比较:[x is str for x in l] 谢谢@chepner! issubclass 工作。 【参考方案1】:

由于您有一个类列表,因此您需要使用 issubclass 而不是 isinstance

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

来自 Python 文档:

issubclass(class, classinfo)

如果类是classinfo 的子类(直接、间接或虚拟),则返回True。一个类被认为是它自己的一个子类。 classinfo 可以是类对象的元组或Union Type,在这种情况下,如果类是classinfo 中任何条目的子类,则返回True。在任何其他情况下,都会引发 TypeError 异常。

【讨论】:

【参考方案2】:

使用== 运算符:

[x == str for x in l]

【讨论】:

以上是关于测试python类是不是为str、list等的主要内容,如果未能解决你的问题,请参考以下文章

将Python3 List(带str参数)转换为Bytes。

python List与String 转化问题

python列表基本操作

python之字符串连接

Python 循环

python接口测试之json模块的使用