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

Python中如何检测对象是父类子类实例而非父类本身?

检测对象是否为父类的子类实例(非父类本身)的简洁方法

你需要判断对象是否是某父类的子类(直接或间接)实例,但排除父类自身的实例,现有枚举所有子类的写法在子类数量多时过于繁琐,而issubclass(type(obj), MyClass)会误判父类自身实例(因为Python中类被视为自身的子类)。以下是两种简洁通用的解决方案:

方法一:结合isinstance与type判断

通过isinstance确保对象属于父类体系,再用type排除父类自身实例:

def is_subclass_instance(obj, parent_cls):
    return isinstance(obj, parent_cls) and type(obj) is not parent_cls

测试示例

class MyClass():
    pass

class Sub1(MyClass):
    pass

class Sub2(MyClass):
    pass

obj_sub = Sub1()
obj_parent = MyClass()

print(is_subclass_instance(obj_sub, MyClass))  # 输出 True
print(is_subclass_instance(obj_parent, MyClass))  # 输出 False

方法二:利用issubclass与type组合

先获取对象的类型,判断该类型是父类的子类,同时排除类型等于父类的情况:

def is_subclass_instance(obj, parent_cls):
    obj_cls = type(obj)
    return issubclass(obj_cls, parent_cls) and obj_cls is not parent_cls

这两种方法都无需枚举所有子类,新增子类时无需修改检测逻辑,完美适配多子类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:42:15