我如何在 Python 中对类列表进行排序,确保任何子类都在列表中的任何父类之前?
我问是因为我想从类型列表中查看对象属于哪种类型,但如果它属于多个类型,则查找最具体的类型。
最佳答案
只需按 len(cls.mro())
排序。
如果 C2
是 C1
的子类,则它必须保存该 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/