我如何在 Python 中对类列表进行排序,确保任何子类都在列表中的任何父类之前?

我问是因为我想从类型列表中查看对象属于哪种类型,但如果它属于多个类型,则查找最具体的类型。

最佳答案

只需按 len(cls.mro()) 排序。

如果 C2C1 的子类,则它必须保存该 len(C1.mro()) < len(C2.mro()) (因为 C1.mro() 中的每个类也必须出现在 C2.mro() 中)。因此,您可以简单地按 mro list 的长度排序:

class A(object): pass
class X(object): pass
class B(A, X): pass
class C(B): pass
class D(C): pass

sorted([B, C, A, D, X], key = lambda cls: len(cls.mro()))
=> [__main__.A, __main__.X, __main__.B, __main__.C, __main__.D]

要同时支持旧式类,您可以将 cls.mro() 替换为 inspect.getmro(cls)

关于python - 如何按继承深度对 Python 类列表进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23660447/

10-11 01:20