我有一个名为CreateDB的python类,其方法为execute(module_name)。 module_name变量是一个字符串,告诉我应该调用该名称的哪个类。 CreateDB不知道并且不关心定义Car类的位置,它只知道它没有在他所在的文件中定义。我知道要上课的课程和功能,但不知道如何上课。
例如:
#in文件夹助手 class CreateDB(): def execute(module_name): #call来自具有该module_name的类的方法 global_dict [MODULE_NAME] .run_sql_create()
#in different folder classes
class Car():
@staticmethod
def run_sql_create():
#do work
c = CreateDB()
c.execute("Car")
问题是,如何使用信号做到这一点?或者将所有类缓存到全局字典中并以这种方式访问它?
答案 0 :(得分:0)
可能有其他方法可以做到,但eval
可能是你的朋友:
class Car(object):
pass
classname = "Car"
the_class = eval(classname, globals(), locals())
这对我有用
答案 1 :(得分:0)
你要做的事情并没有明确定义。在不同的模块中可能有几个具有相同名称的类,这是完全有效的。你怎么知道用户想要哪一个?
我建议两种选择:
globals()
(例如cls = globals()[class_name] ; cls.execute('Car')
)__import__
或imp
模块),然后访问其中定义的类。例如。 mod = __import__(mod_name) ; getattr(mod, class_name).execute('Car')