有没有办法用列表/集合理解来“一行”呢?

2024-06-25 05:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我递归获取所有子类的classmethod:

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

有没有办法把它做成一行的?比如:

return set(subclass.__subclasses__() for subclass in self.__subclasses__())

Tags: inselfaddforgetreturndefupdate
3条回答

这是将一个逻辑行拆分为两行源代码以提高可读性:

@classmethod
def get_subclasses(cls):
    return set(cls.__subclasses__()) | {g for s in cls.__subclasses__()
                                            for g in s.get_subclasses()}

一行是可能的,但我认为保持两行可以保持清晰:

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

这将返回从基类继承的所有子类的名称。你知道吗

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

相关问题 更多 >