如何从家长班获得所有孩子的模特儿? 例如,我有:
package.json
所以我想从Device模型中获取所有后代:移动,计算机作为类而不是实例。
谢谢。
答案 0 :(得分:4)
您可以使用class.__subclasses__()
[Python-doc]方法获取 direct 子类:
>>> Device.__subclasses__()
[<class 'Mobile'>, <class 'Computer'>]
然而,这些也可能具有子类。我们可以开发一种算法,每次获得下一代算法,并一直这样做直到找到新的子类为止,例如:
def get_descendants(klass):
gen = { klass }
desc = set()
while gen:
gen = { skls for kls in gen for skls in kls.__subclasses__() }
desc.update(gen)
return desc
或具有可变数量的参数:
def get_descendants(*klass):
gen = { *klass }
desc = set()
while gen:
gen = { skls for kls in gen for skls in kls.__subclasses__() }
desc.update(gen)
return desc
这将返回包含所有后代(直接和间接)的set()
。