python - 从另一个类调用static方法,只给出另一个类的名称

时间:2014-04-08 17:41:56

标签: python

我有一个名为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")

问题是,如何使用信号做到这一点?或者将所有类缓存到全局字典中并以这种方式访问​​它?

2 个答案:

答案 0 :(得分:0)

可能有其他方法可以做到,但eval可能是你的朋友:

class Car(object):
    pass

classname = "Car"

the_class = eval(classname, globals(), locals())

这对我有用

答案 1 :(得分:0)

你要做的事情并没有明确定义。在不同的模块中可能有几个具有相同名称的类,这是完全有效的。你怎么知道用户想要哪一个?

我建议两种选择:

  1. 预先导入您想要支持的所有可能的类。然后,您可以通过globals()(例如cls = globals()[class_name] ; cls.execute('Car')
  2. 访问它们
  3. 让用户还指定要从中导入的模块。然后,您可以按名称动态导入模块(例如,使用__import__imp模块),然后访问其中定义的类。例如。 mod = __import__(mod_name) ; getattr(mod, class_name).execute('Car')