class A: pass
class B(A): pass
class C: pass
class D(B): pass
class E(B, C): pass
def lca_type(classes):
last_parent = None
for parents in zip(*(reversed(cls.mro()) for cls in classes)):
if len(set(parents)) > 1:
break
last_parent = parents[0]
return last_parent.__name__
print(lca_type({D, E}))
Y2xhc3MgQTogcGFzcwpjbGFzcyBCKEEpOiBwYXNzCmNsYXNzIEM6IHBhc3MKY2xhc3MgRChCKTogcGFzcwpjbGFzcyBFKEIsIEMpOiBwYXNzCgpkZWYgbGNhX3R5cGUoY2xhc3Nlcyk6CiAgICBsYXN0X3BhcmVudCA9IE5vbmUKICAgIGZvciBwYXJlbnRzIGluIHppcCgqKHJldmVyc2VkKGNscy5tcm8oKSkgZm9yIGNscyBpbiBjbGFzc2VzKSk6CiAgICAgICAgaWYgbGVuKHNldChwYXJlbnRzKSkgPiAxOgogICAgICAgICAgICBicmVhawogICAgICAgIGxhc3RfcGFyZW50ID0gcGFyZW50c1swXQogICAgcmV0dXJuIGxhc3RfcGFyZW50Ll9fbmFtZV9fCgpwcmludChsY2FfdHlwZSh7RCwgRX0pKQ==