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

标签 python class

我有一个特定的类,即Animal,以及几个子类,例如DogCowLion、等等

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

所有这些子类都实现 eats,并且根据每种动物,将返回 TrueFalse

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

例如,我想获取一个吃草的 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()

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

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

关于Python - 迭代扩展类的类列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725345/

相关文章:

java - 哪个模板是 netbeans 默认的新 java 类?

python错误:builtin_function_or_method object is unsubscriptable

python - 侧面的 sns.jointplot "kde"样式的颜色条

python - 如何在 Python 的 print 函数中读取数组的元素?

c++ - N 不命名类型

.net - 我什么时候应该使用结构?

ios - 如何在 Swift 中设置新的类文件

python - SQLAlchemy 不仅通过主键从身份映射中获取项目

python - 如何快速获取numpy数组中非零值的索引?

javascript - 从继承的实例创建 javascript 基类对象