在运行时执行的文件中类声明的命名空间

时间:2016-03-06 21:36:13

标签: python class namespaces

我写了一个程序,允许用户给我一个类名和定义该类的文件,如下所示:

    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;如预期的。

我做错了什么?我猜这与某些命名空间约定有关。在定义类似的类时我是否需要定义命名空间,如果是,我该怎么做呢。否则,问题是什么?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

evalexecfile应避免使用,此处不需要。 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])