如何从python中的字符串导入和实例化一个类?

时间:2017-12-20 04:12:24

标签: python python-3.x

我可以运行这两行,但我想用字符串来做,

from envs.test_env import TestEnv
my_instance = TestEnv()

文件test_env.py位于文件夹envs中。所以envs / test_folder.py

我想要字符串变量,如:

path = "envs/test_env"
my_class_name = "TestEnv"
mod = __import__(path)
my_class = getattr(my_class_name,my_class_name)
my_instance = my_class()

我得到的错误是:

ModuleNotFoundError: No module named 'envs/test_env'

我看到有一些类似的门票,但我看起来不同,因为我结合了几个不同的东西。我想导入一个子目录中的文件,我有字符串中的类名和文件名。

1 个答案:

答案 0 :(得分:0)

将模块添加到路径中。 请查看下面的示例:

目录结构

Current_Dir
    |
    |---qwerty.py
    |
    |---dinesh 
          |
          |--dsp.py -->> This file has class 'call_me' 

dsp.py代码:

class call_me(object):

    def __init__(self):
        pass

    def run(self):
        print("Dinesh")

qwerty.py代码:

import sys
import os

lib_path = os.getcwd() + os.sep + 'dinesh'
sys.path.insert(0,lib_path)

mod = __import__('dsp')
a = getattr(mod,'call_me')

s = a()
s.run()

<强>输出

C:\Users\punddin\PycharmProjects\demo>python qwerty.py
Dinesh

=============================================== =========================

使用importlib

import sys
import os
import importlib

lib_path = os.getcwd() + os.sep + 'dinesh'
sys.path.insert(0,lib_path)

mod = importlib.import_module('dsp')
a = getattr(mod,'call_me')
s = a()
s.run()