3

class直接的または間接的にそれを拡張するa およびその他のクラスが与えられます。元のクラスを直接拡張するすべてのクラスを取得する方法はありますか。

class Alpha(object):
    @classmethod
    def get_derivatives(cls):
        return [Beta, ] # when called from Alpha
        return [] # when called from Beta

class Beta(Alpha):
    pass

いくつかの複雑な問題があるか、完全に不可能だと思います。派生クラスが定義されている場所に関するいくつかの仕様が必要になるため、物事が難しくなります...

派生クラスを基本クラスにハードコーディングするのが私の最善の策ですか?

4

1 に答える 1

5

__subclasses__おそらくあなたは方法を探しています:

class Alpha(object):
    @classmethod
    def get_derivatives(cls):
        return cls.__subclasses__() 

class Beta(Alpha):
    pass

print(Alpha.get_derivatives())
print(Beta.get_derivatives())

収量

[<class '__main__.Beta'>]
[]
于 2012-12-23T20:11:27.973 に答える