2024-04-19 23:32:25 发布
网友
有没有一种方法可以将python模块中的所有类初始化为一个无名对象列表?在
示例 我有一个模块rules,它包含类规则中的所有子类。因此,我确信它们都将实现一个方法run(),并且将具有一个属性name,该属性将在调用{}期间生成
rules
run()
name
我想要一个从这些类中动态启动的对象的列表。动态初始化意味着它们不必显式命名。在
问题是:
是否可以在一个模块中迭代所有的类?在
可以启动一个无名对象吗?在
你至少可以采取两种方法。您可以通过调用类的__subclasses__()方法来获取类的所有子类。因此,如果父类名为Rule,则可以调用:
__subclasses__()
Rule
rule_list = [cls() for cls in Rule.__subclasses__()]
这将为您提供Rule的所有子类,并且不会将它们限制为在特定模块中找到的子类。在
如果你有一个模块的句柄,你可以迭代它的内容。是这样的:
不幸的是,issubclass会抛出TypeError,如果你给它一个不是类的对象作为它的第一个参数。所以你得想办法解决这个问题。在
issubclass
TypeError
编辑:按照@Blckknght的建议处理issubclass怪癖。在
你至少可以采取两种方法。您可以通过调用类的
__subclasses__()
方法来获取类的所有子类。因此,如果父类名为Rule
,则可以调用:这将为您提供
Rule
的所有子类,并且不会将它们限制为在特定模块中找到的子类。在如果你有一个模块的句柄,你可以迭代它的内容。是这样的:
^{pr2}$不幸的是,
issubclass
会抛出TypeError
,如果你给它一个不是类的对象作为它的第一个参数。所以你得想办法解决这个问题。在编辑:按照@Blckknght的建议处理
issubclass
怪癖。在相关问题 更多 >
编程相关推荐