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
相关产品推荐
相关产品推荐

