如何通过列表创建类的实例

时间:2012-11-08 15:45:27

标签: python

我正在开发一个python项目,其中已经创建了许多类。 我将要求用户输入要执行的类(即,类的名称,其列表将显示给他)。

在他选择了一个选项之后,我想创建一个用户请求的类的实例并显示相应的输出。

情景是这样的......

"""
My Class definitions go up here...
"""


classList = {'a':'AClass','b':'BClass','c':'CClass'}
for i in iter(classList):
   print i
x = raw_input('Enter class name: ') 'Get the user input and store it.'
"""
I'm stuck here.
Have to create an instance for the requested class.
i.e., have to create an instance to AClass if the user entered a (classList[a])
"""

一个程序,我知道,但模糊的是使用switch case或if-else来检查输入并为相应的类创建实例。但是,我是python的新手,所以我想知道是否还有其他方法可以更优雅地实现这一目标?

3 个答案:

答案 0 :(得分:2)

不是在classList中存储类名称,而是可以自己存储类:

class AClass(object): pass
class BClass(object): pass
class CClass(object): pass

classList = {'a':AClass, 'b':BClass, 'c':CClass}

这样,实例化名称存储在x中的类就像

一样简单
obj = classList[x]()

答案 1 :(得分:0)

你有一个不错的开始,但你需要记住你可以传递课程。所以这会奏效:

class A(): pass

class B(): pass

map = {'a': A, 'b': B}

instance = map['a']()

答案 2 :(得分:0)

如果您仍想从字符串创建类实例,那么这是我的vanilla函数:

def get_object_type(classname, modulename):
    __import__(modulename)
    return getattr(sys.modules[modulename], classname)

def get_object_instance(classname, modulename, param={}):
    return get_object_type(classname, modulename)(**param)

new_instance = get_object_instance("ClassA", "modulename")