代码之家  ›  专栏  ›  技术社区  ›  David Parks

按字符串导入Python类

  •  0
  • David Parks  · 技术社区  · 6 年前

    我试图使用字符串名称在子模块中实例化一个类。我一直试图回答这个问题,但没有成功:

    Python dynamic instantiation from string name of a class in dynamically imported module

    我创建了以下目录结构:

    __init__.py
    mymodule/
    ├── __init__.py
    └── MyClass.py 
    

    MyClass.py 包含:

    class MyClass():
        def __init__(self, someparam):
            print(someparam)
    

    在python中,我尝试了以下产生错误的方法。

    getattr(importlib.import_module('mymodule'), 'MyClass')
    
    AttributeError: 'module' object has no attribute 'MyClass'
    

    我已经尝试了参考问题中提出的大多数其他解决方案,但没有让其中任何一个使用此设置。

    以下是基于我尝试遵循的答案的其他失败尝试,以说明我在以下方面的尝试和失败:

    import importlib
    module = importlib.import_module('mymodule')
    class_ = getattr(module, 'MyClass')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'MyClass'
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   David Parks    6 年前

    您的代码等效于:

    from mymodule import MyClass
    

    mymodule 不包含 MyClass ,因此您将得到一个错误。您需要等效的:

    from mymodule.myclass import MyClass
    

    这将是:

    getattr(importlib.import_module('mymodule.MyClass'), 'MyClass')