将模块中的所有类初始化为lis中的无名对象

2024-04-19 23:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以将python模块中的所有类初始化为一个无名对象列表?在

示例 我有一个模块rules,它包含类规则中的所有子类。因此,我确信它们都将实现一个方法run(),并且将具有一个属性name,该属性将在调用{}期间生成

我想要一个从这些类中动态启动的对象的列表。动态初始化意味着它们不必显式命名。在

问题是:

是否可以在一个模块中迭代所有的类?在

可以启动一个无名对象吗?在


Tags: 模块对象方法runname示例列表属性
1条回答
网友
1楼 · 发布于 2024-04-19 23:32:25

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

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

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

如果你有一个模块的句柄,你可以迭代它的内容。是这样的:

^{pr2}$

不幸的是,issubclass会抛出TypeError,如果你给它一个不是类的对象作为它的第一个参数。所以你得想办法解决这个问题。在

编辑:按照@Blckknght的建议处理issubclass怪癖。在

相关问题 更多 >