我需要找到一组类的最后一个共同祖先,以便返回该类型。
背景是我正在进行一些相当复杂的元编程,涉及重载numpy的功能。(不要问我)我有一个函数的可变数量的参数,我已经将其类型提取到一个集合中(通过过滤掉不相关的类型),使用这些信息,我需要弄清楚在类型树上所有类型共享相同基类型的最远距离。我有一些第一次尝试,但我被多继承等问题绊倒了。
第一次尝试:
背景是我正在进行一些相当复杂的元编程,涉及重载numpy的功能。(不要问我)我有一个函数的可变数量的参数,我已经将其类型提取到一个集合中(通过过滤掉不相关的类型),使用这些信息,我需要弄清楚在类型树上所有类型共享相同基类型的最远距离。我有一些第一次尝试,但我被多继承等问题绊倒了。
第一次尝试:
def lca_type(types):
if len(types) == 1:
return types.pop()
filtered_types = set()
for type in types:
if not any(issubclass(type, x) for x in types):
filtered_types.add(type)
if len(filtered_types) == 1:
return filtered_types.pop()
# TODO: things get tricky here
考虑以下类层次结构:
class A(object):
pass
class B(A):
pass
class C(A):
pass
class D(A):
pass
class B1(B):
pass
class B2(B):
pass
class BC(C, B1):
pass
class CD(C, D):
pass
class D1(D):
pass
class BD(B, D):
pass
class B1_1(B1):
pass
预期结果:
lca_type({A,BD}) == A
lca_type({C}) == C
lca_type({B1,B2}) == B
lca_type({{B1_1, D}) == A
lca_type({CD, BD}) == D
lca_type({B1_1, BC}) == B1