example code:
class A:
class B:
def __init__(self):
pass
var = A.B()
i need a function, let's say check_if_class_parent(obj, class_type) that would check if var is an instance of an inner class whose outer class is A, which if i run check_if_class_parent(var, A), it would return True
sometimes the class structure could be like this:
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), and check_if_class_parent(var_two, A) would all return True, but check_if_class_parent(var, C) would return False
CodePudding user response:
An
outerattribute could be added to the inner classes, in which case it's just a matter of walking up anyouterattributes found on a value's type to see ifAcan be reached. However this does add extra definitions.A search can be conducted starting from
A. E.g. (and not accounting for any dastardly cyclic references at all):
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
