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

Python如何判断变量是否为指定外层类的内部类的实例

实现思路

Python 类的 __qualname__ 属性会存储类在定义结构中的完整层级路径,嵌套类的路径会通过点号拼接上层类的名称,我们可以通过比对类路径前缀,结合模块校验实现需求,核心逻辑如下:

  1. 排除对象本身就是目标类直接实例的场景
  2. 校验两个类属于同一模块,避免不同模块同名类误判
  3. 拆分两者的层级路径,判断对象类的路径前缀是否完全匹配目标类的路径,且长度更长(说明是嵌套在内部的类)
代码实现
def check_if_class_parent(obj, class_type):
    # 获取对象对应的类
    obj_cls = type(obj)
    # 排除对象为目标类直接实例的情况
    if isinstance(obj, class_type):
        return False
    # 校验两个类属于同一模块,避免同名类误判
    if obj_cls.__module__ != class_type.__module__:
        return False
    # 拆分层级路径
    obj_path = obj_cls.__qualname__.split('.')
    target_path = class_type.__qualname__.split('.')
    # 对象类路径长度不大于目标类的话,不可能是其内部嵌套类
    if len(obj_path) <= len(target_path):
        return False
    # 比对前缀是否完全匹配
    return obj_path[:len(target_path)] == target_path
测试验证

用你给出的示例代码测试:

class A:
    class B:
        def __init__(self):
            pass
        
        class C:
            def __init__(self):
                pass

var = A.B.C()
var_two = A.B()
B = A.B
C = A.B.C

print(check_if_class_parent(var, A))       # 输出 True
print(check_if_class_parent(var, B))       # 输出 True
print(check_if_class_parent(var_two, A))   # 输出 True
print(check_if_class_parent(var, C))       # 输出 False

运行结果完全符合你给出的预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:07