[英]Python - Iterate through list of classes that extend class?
我有一个类,即Animal
,还有几个子类,如Dog
, Cow
, Lion
等。
Animal
是一个抽象类,它有一个抽象的静态方法eats(Food f)
。
所有这些子类都实现了eats
,根据每只动物,它们将返回True
或False
。
我如何迭代每一个并创建一个新的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.