簡體   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