7

子クラスがリスト内の親クラスの前にあることを確認して、Python でクラスのリストを並べ替えるにはどうすればよいですか?

タイプのリストからオブジェクトが属するタイプを確認したいので質問しますが、複数に属する場合は最も具体的なタイプを見つけます。

4

2 に答える 2

1

より良いアプローチは、セットを使用してから、ターゲット クラスの継承ツリーに沿って移動することです。

def find_parent(target, class_set):
    if target in class_set:
        return [target]
    else:
        bases = []
        for parent in target.__bases__:
            result = find_parent(parent, class_set)
            if result is not None:
                bases.extend(result)
        return bases

例:

class A(object):
    pass

class B(str):
    pass

class C(A):
    pass

class D(A, dict):
    pass

class_set = {dict, A}

print find_parent(A, class_set)
print find_parent(B, class_set)
print find_parent(C, class_set)
print find_parent(D, class_set)

次の結果が得られます。

[<class '__main__.A'>]
[]
[<class '__main__.A'>]
[<class '__main__.A'>, <type 'dict'>]
于 2014-05-14T16:55:38.217 に答える