我有一些在不同目录中的模块。仅当类是ParentClass
的子类时,如何实例化这些module
中的类?基本上,我正在尝试下面这样的东西,想知道如何实现child_class_name
from importlib.machinery import SourceFileLoader
from parent_class import ParentClass
instances = []
script_path1 = r'/some/different/directory/some_child.py'
script_path2 = r'/some/different/directory/another_child.py'
for script_path in [script_path1, script_path2]:
module = SourceFileLoader('module', script_path).load_module()
child_class_name = "If a class in this module is a subclass of ParentClass"
ChildClass = getattr(module, child_class_name)
instances.append(ChildClass())
这应该适用于以下理解列表:
vars(module).values()
返回模块中的所有对象。你知道吗然后可以用
issubclass(obj,ParentClass)
过滤子类。你知道吗(
isinstance
只会帮助过滤类对象。)childclasses
是可以直接实例化的类列表,无需使用getattr
:编辑:
为了避免
ParentClass
,您可以将列表转换为一个集合,如果存在则将其删除:或在理解中增加另一项测试:
相关问题 更多 >
编程相关推荐