有没有办法去单线"这使用list / set comprehension?

时间:2015-05-04 17:41:57

标签: python python-3.x list-comprehension set-comprehension

这是我的递归获取所有子类的类方法:

eval()

有没有办法让它成为单行?类似的东西:

@classmethod
def get_subclasses(cls):
    subclasses = set()
    for subclass in cls.__subclasses__():
        subclasses.add(subclass)
        subclasses.update(subclass.get_subclasses())
    return subclasses

3 个答案:

答案 0 :(得分:2)

可以使用单行,但我认为保持两行可以保持清晰:

subclasses = set(cls.__subclasses__())
return subclasses + set(sc.get_subclasses() for sc in subclasses)

答案 1 :(得分:0)

这是一条分为两行的逻辑行,以提高可读性:

{{1}}

答案 2 :(得分:-1)

这将返回从Base类继承的所有子类的名称。

print([cls.__name__ for cls in vars()['Base'].__subclasses__()])