gpt4 book ai didi

python - 将模块中的所有类初始化为列表中的无名对象

转载 作者:太空狗 更新时间:2023-10-29 21:40:14 28 4
gpt4 key购买 nike

有没有办法将 python 模块中的所有类初始化为无名对象列表?

例子我有一个模块 rules,它包含一个类 Rule 的所有子类。因此,我确定它们都将实现一个方法 run() 并将具有一个属性 name,该属性将在 __init__< 的调用期间生成

我想要一个从这些类动态启动的对象列表。通过动态初始化,我的意思是它们不必明确命名。

问题是:

是否可以遍历模块中的所有类?

可以初始化一个无名对象吗?

最佳答案

您至少可以采用两种方法。您可以通过调用类的 __subclasses__() 方法来获取类的所有子类。因此,如果您的父类称为 Rule,您可以调用:

rule_list = [cls() for cls in Rule.__subclasses__()]

这将为您提供 Rule 的所有子类,并且不会将它们限制为在特定模块中找到的子类。

如果您有模块句柄,则可以迭代其内容。像这样:

import rule
rule_list = []
for name in dir(rule):
value = getattr(rule, name)
if isinstance(value, type) and issubclass(value, Rule):
rule_list.append(value())

不幸的是,如果你给它一个不是类的对象作为它的第一个参数,issubclass 会抛出 TypeError。所以你必须以某种方式处理它。

编辑:根据@Blckknght 的建议处理 issubclass 怪癖。

关于python - 将模块中的所有类初始化为列表中的无名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18316820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com