我写了一个程序,允许用户给我一个类名和定义该类的文件,如下所示:
input = raw_input("Input the new classname with a space and then the file name defining the class")
class_name, file_name = input.split(" ")
然后我执行定义类的文件:
execfile(file_name)
并尝试创建新定义的类的实例:
d[k] = eval(new_class)(**d[k])
然而,这会产生以下错误:
d[i] = eval(new_class)(**d[i])
File "<string>", line 1, in <module>
NameError: name 'MeasureDay' is not defined
这是在我输入了以下执行的类定义之后:
class MeasureDay:
print("defining measureday")
def __init__(self, **kargs):
self.day = kwargs.get('day', -1)
self.measurement_value = kwargs('measurement_value', -1)
def __str__(self):
return "here is a custom defined string for MeasureDay"
我知道类定义已执行,因为我看到了记录的语句&#34;定义了测量结果&#34;如预期的。
我做错了什么?我猜这与某些命名空间约定有关。在定义类似的类时我是否需要定义命名空间,如果是,我该怎么做呢。否则,问题是什么?
感谢您的任何建议。
答案 0 :(得分:0)
eval
和execfile
应避免使用,此处不需要。 importlib.import_module
可以从字符串中导入模块文件,然后您可以使用getattr
来获取实例化的类。
class_name, file_name = input.split(" ")
mod = import_module(file_name)
cls = getattr(mod, class_name)
d[k] = cls(**d[k])