Python动态类名创建

2024-06-25 23:10:03 发布

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

我有以下设置:

test.py
test\
    __init__.py
    abstract_handler.py
    first_handler.py
    second_handler.py

第一个_处理程序.py第二个_处理程序.py包含从抽象的\u处理程序继承的具有相同名称的类。在

我想做什么测试.pyis:给定一个包含“first_handler”或任何其他handler类的字符串,创建该类的对象。在

我发现的大多数解决方案都假设这些类在同一个模块中(测试.py),我不知道如何动态导入特定的必需类。在


Tags: 模块对象字符串pytest名称abstract处理程序
3条回答

使用字典进行这种调度。在

import first_handler
import second_handler

dispatch_dict = {
    'first': first_handler.FirstHandler
    'second': second_handler.SecondHandler
}

现在,假设您的选择在choice_string

^{pr2}$

你可以这样做:

from first_handler import SameName as handler1
from second_handler import SameName as handler2

handlers = {'UniqueName1': handler1,
            'UniqueName2': handler2}

instance = handlers['UniqueName1']()

使用__import__进行导入。请注意,如果使用子模块,则必须指定fromlist,否则将获得顶层模块。因此

__import__('foo.bar', fromlist=['foo']).__dict__['baz_handler']()

将调用foo.bar.baz_handler()

相关问题 更多 >