【问题标题】:Why this operation returns False? (string.__class__ == "<class 'str'>")为什么这个操作返回 False? (string.__class__ == "<class 'str'>")
【发布时间】:2018-11-15 01:21:44
【问题描述】:

我想知道为什么我无法使用 class

确定对象是否为字符串
string = "s"
print(string.__class__) # print(<class 'str'>)
print(string.__class__ == "<class 'str'>") # False

顺便说一句,我知道有 isinstance() 函数

【问题讨论】:

  • print(...__class__)...__class__ 不同。 print 调用对象的 __str____repr__ 方法。
  • 因为您将类对象与字符串进行比较?这不是 javascript,typeof 返回一个字符串。
  • type(string) 避免使用 dunder 属性

标签: python string python-3.x class boolean


【解决方案1】:

你可以使用__name__属性:

>>>string.__class__.__name__ == 'str'
True

但是,要使用 __class__,请将 str 作为内置函数进行比较:

>>>string.__class__ == str
True

【讨论】:

  • __class __ 是一个实例变量吗?
  • @IslamMurtazaev 是的。 __class__ 是某个其他类的实例的属性。例如,给定 class Test: passTest.__class__ 将返回 &lt;class 'type'&gt;(在 Python3 中),因为类是总体 type 类的一个实例。然而,t = Test();t.__class__ 将返回&lt;class '__main__.Test'&gt;,因为tTest 的一个实例。
【解决方案2】:

那些应该适用于任何字符串 s:

s.__class__.__name__ == 'str'

type(s) is str

顺便说一句:我建议使用第二个,因为它更具可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多