当前位置 : 主页 > 手机开发 > 其它 >

如何通过继承深度对Python类列表进行排序?

来源:互联网 收集:自由互联 发布时间:2021-06-19
我如何在 Python中对类列表进行排序,确保任何子类都在列表中的任何父类之前? 我问,因为我想查看一个类型列表中的类型,一个对象属于哪个类型,但是如果它属于多个类型,则查找最具体
我如何在 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().

网友评论