有没有办法检查一个变量是否是一个内部 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
可以将 outer
属性添加到内部 类,在这种情况下,只需向上移动在值的 outer
上找到的任何属性键入以查看是否可以到达 A
。然而,这确实增加了额外的定义。
可以从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
示例代码:
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
可以将
outer
属性添加到内部 类,在这种情况下,只需向上移动在值的outer
上找到的任何属性键入以查看是否可以到达A
。然而,这确实增加了额外的定义。可以从
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