gpt4 book ai didi

python - 最大公共(public)父类(super class)

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:00 25 4
gpt4 key购买 nike

是否有任何简单的方法来获取对象列表的“最大公共(public)父类(super class)”?例如,如果

class A(object): pass
class B(A): pass
class C(A): pass
class D(B, C): pass
class E(C): pass
class F(D, E): pass

b = B()
d = D()
e = E()

然后

gcs(b, e) is A
gcs(d, e) is C
gcs(e, e) is E

最佳答案

基于 Martijn 的想法,但考虑到时间复杂度在这里不会成为问题,使用更简单的方法(感谢@veedrac 的输入):

def gcs(*instances):
classes = [type(x).mro() for x in instances]
for x in classes[0]:
if all(x in mro for mro in classes):
return x

print gcs(b, e)
print gcs(d, e)
print gcs(e, e)

输出:

<class '__main__.A'>
<class '__main__.C'>
<class '__main__.E'>

上述代码使用集合的轻微变体:

def gcs(*instances):
mros = (type(ins).mro() for ins in instances)
mro = next(mros)
common = set(mro).intersection(*mros)
return next((x for x in mro if x in common), None)

关于python - 最大公共(public)父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25786566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com