测试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等的主要内容,如果未能解决你的问题,请参考以下文章