我如何在 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]
要同时支持旧式类,可以使用inspect.getmro(cls)
替换cls.mro().