1

我正在开发一个 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 新手,所以我想知道是否有任何其他方式可以以更优雅的方式实现这一点?

4

3 回答 3

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]()
于 2012-11-08T15:47:57.620 回答
0

你有一个不错的开始,但你需要记住你可以通过课程。所以这会起作用:

class A(): pass

class B(): pass

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

instance = map['a']()
于 2012-11-08T15:48:04.493 回答
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")
于 2012-11-08T16:11:00.377 回答