python - 如何确定最接近的共同祖先类

标签 python inheritance lowest-common-ancestor

假设我有四个类(class):A , B源自A , C源自A ,和D源自C 。 (所以我总是有单一继承。) 在Python中,确定任何两个(此类)类的最接近的共同祖先的最佳方法是什么?具体来说,我需要一个函数 clcoancl(X,Y)其中clcoancl(A, B) == A , clcoancl(B, C) == A ,和clcoancl(C, D) == C .

最佳答案

这应该适用于单一或多重继承,以任意数量的类作为输入:

import inspect
from collections import defaultdict

def clcoancl(*cls_list):
    mros = [list(inspect.getmro(cls)) for cls in cls_list]
    track = defaultdict(int)
    while mros:
        for mro in mros:
            cur = mro.pop(0)
            track[cur] += 1
            if track[cur] == len(cls_list):
                return cur
            if len(mro) == 0:
                mros.remove(mro)
    return None # or raise, if that's more appropriate

正如 NPE 和 Daniel Rossman 所提到的,这可能不是解决根本问题的最佳解决方案。

关于python - 如何确定最接近的共同祖先类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15788725/

相关文章:

go - 如何解析 YAML 文件并从父结构创建子对象(继承)

nested-set-model - 在嵌套集中查找最低公共(public)祖先

algorithm - 树中的回文

python - 在列表中查找第二大数字

python - 无法安装 MySQL-Python

java - 为什么一个私有(private)构造函数的私有(private)内部类可以被子类化?

python - 了解 Python 中的迭代器和生成器

python - 从 0.5.1 升级到 0.8.2 后,graph_from_polygon 中出现 osmnx TypeError

c++ - 多层继承在 C++ 中有意义吗?