You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3中如何获取类的字符串名称及判断对象类名是否匹配

2. 如何对比类名的字符串?(以及你尝试失败的原因)

先说说你为什么得到了 False:
你写的 a.__class__ == 'io.TextIOWrapper' 里,左边是类对象(<class '_io.TextIOWrapper'>),右边是字符串,两者类型完全不同,肯定不会相等;另外还要注意,这个类的完整路径是 _io.TextIOWrapper(带下划线),不是你写的 io.TextIOWrapper,就算改成字符串对比也会因为名字不对失败。

下面给你两种可行的方案:

方案一:字符串形式对比(不推荐,但满足你的需求)

先拿到包含模块的完整类名字符串,再进行对比:

a = open('/etc/passwd')
# 获取完整类名(模块+类名)
full_class_name = f"{a.__class__.__module__}.{a.__class__.__name__}"
print(full_class_name == '_io.TextIOWrapper')  # 输出: True

方案二:直接对比类对象(推荐,更可靠)

在Python里,检查对象类型的标准做法是用 isinstance() 或者直接对比 type(),比字符串对比靠谱多了——毕竟字符串可能写错,而且无法处理继承关系:

import _io

a = open('/etc/passwd')
# 方法1:用isinstance(推荐,支持子类继承)
print(isinstance(a, _io.TextIOWrapper))  # 输出: True

# 方法2:直接对比type(仅严格匹配当前类型)
print(type(a) is _io.TextIOWrapper)  # 输出: True

为什么推荐 isinstance()?举个例子,如果有一个类继承自 _io.TextIOWrapper,它的实例用 isinstance() 也会返回 True,但 type() is 只会返回 False,前者更符合大多数场景的类型检查需求。


内容的提问来源于stack exchange,提问作者Machine Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:48:13