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

type()函数如何推断对象类型?关于isinstance(obj1, type(obj2))的疑问

关于type()与isinstance(obj1, type(obj2))的疑问解答

1. type()函数的类型推断逻辑

type(obj)会直接返回对象obj所属的最具体(精确)的类——也就是创建该对象时对应的那个类,绝对不会返回它的祖先类。举个实际例子:

class Parent:
    pass

class Child(Parent):
    pass

child_obj = Child()
print(type(child_obj))  # 输出 <class '__main__.Child'>,而非Parent

不管继承层级有多深,type()只返回对象直接归属的类。

2. type()返回的类型会不会是祖先类?

不会。只有当对象本身就是祖先类的实例时,type()才会返回祖先类。比如:

parent_obj = Parent()
print(type(parent_obj))  # 输出 <class '__main__.Parent'>

如果对象是子类实例,type()永远只会指向子类,和父类无直接关联。

3. 用isinstance(obj1, type(obj2))的实际效果

这个写法本质是检查obj1是否是obj2的精确类型,或者该类型的子类的实例。看几个场景:

# 场景1:两个对象是同一类的实例
obj1 = Child()
obj2 = Child()
print(isinstance(obj1, type(obj2)))  # True

# 场景2:obj1是obj2类型的父类实例
obj3 = Parent()
print(isinstance(obj3, type(obj2)))  # False

# 场景3:obj1是obj2类型的子类实例
obj4 = Child()
obj5 = Parent()
print(isinstance(obj4, type(obj5)))  # True

如果你只是想判断两个对象的精确类型完全相同,直接用type(obj1) is type(obj2)更直观;如果允许obj1是obj2类型的子类实例,isinstance(obj1, type(obj2))才是合适的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:45:28