有没有办法检查一个变量是否是一个内部 class 的实例,其外部 class 是某个 class?

Is there a way to check if a variable is an instance of an inner class whose outer class is a certain class?

示例代码:

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

var = A.B()

我需要一个函数,比方说 check_if_class_parent(obj, class_type),它将检查 var 是否是内部 class 的实例,其外部 class 是 A ,如果我 运行 check_if_class_parent(var, A),它会 return True

有时 class 结构可能是这样的:

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

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

check_if_class_parent(var, A)check_if_class_parent(var, B)check_if_class_parent(var_two, A) 都会 return True,但是 check_if_class_parent(var, C) 会 return False

  1. 可以将 outer 属性添加到内部 类,在这种情况下,只需向上移动在值的 outer 上找到的任何属性键入以查看是否可以到达 A。然而,这确实增加了额外的定义。

  2. 可以从A开始搜索。例如。 (并且根本不考虑任何卑鄙的循环引用):

def is_type_within(obj, type_):
    if isinstance(obj, type_):
        return True
    for attr in dir(type_):
        if attr.startswith('__'):
            continue
        if is_type_within(obj, getattr(type_, attr)):
            return True
    return False