[英]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.