繁体   English   中英

Python - 迭代扩展类的类列表?

[英]Python - Iterate through list of classes that extend class?

我有一个类,即Animal ,还有几个子类,如DogCowLion等。

Animal是一个抽象类,它有一个抽象的静态方法eats(Food f)

所有这些子类都实现了eats ,根据每只动物,它们将返回TrueFalse

我如何迭代每一个并创建一个新的Animal其类型eats特定食物而无需手动输入每个类?

例如,我想得到一个类型为Animal的物体吃草,而不是真正创造一个新的Cow

查找Animal的子类可能是其中的一部分,但我更感兴趣的是实际迭代某些类列表并在每个类上运行eats ,直到找到一个返回True然后创建该类的新对象。

谢谢。

您可以遍历所有子类,执行检查,然后获取匹配的第一个:

def create_animal_eating(food):
    gen = (subclass for subclass in Animal.__subclasses__() if subclass.eats(food))
    subclass = next(gen, None)
    if subclass is None:
        raise ValueError("No animal eats " + repr(food))
    new_obj = subclass()

这基本上完全符合您的描述,因此不需要任何解释。

但它只获得直接的子类; 如果您确实需要所有子类,无论它们嵌套的深度如何,请参阅链接的文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM