【问题标题】: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 工作。

标签: python boolean conditional-statements python-class


【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      相关资源
      最近更新 更多