Python 如何从循环中的不同类启动对象?

Python 如何从循环中的不同类启动对象?,python,Python,我试图从不同的类初始化对象,参数在一个列表中。类的类型需要由列表中的参数设置,我希望避免使用条件语句,即它可以扩展到更多的类。 启动的对象将添加到对象列表中 例如: example_list = [['x', 20], ['p', 50], ['d', 100] obj_list = [] for i in example_list: if i[0] == 'x': xylophone = Xylophone('x', 20) obj_list.app

我试图从不同的类初始化对象,参数在一个列表中。类的类型需要由列表中的参数设置,我希望避免使用条件语句,即它可以扩展到更多的类。 启动的对象将添加到对象列表中

例如:

example_list = [['x', 20], ['p', 50], ['d', 100]

obj_list = []

for i in example_list:
    if i[0] == 'x':
        xylophone = Xylophone('x', 20)
        obj_list.append(xylophone)
    if i[0] == 'p':
        piano = Piano('p', 50)
        obj_list.append(piano)
    if i[0] == 'd':
        drum = Drum('d', 100)
        obj_list.append(drum)
因为类是python中的对象,所以您可以

classes = dict(
    x=Xylophone,
    p=Piano,...)

for class_name, arg in my_list:
    cls = classes[class_name]
    object = cls(class_name, arg)

指向一个方向:尝试使用字典作为开关盒。您应该使用字典如果所有类都有相同的接口,就像它们看起来一样,您可以使用字典将字母映射到类:
instruments={“x”:Xylophone,…}
然后在列表理解中实例化它们:
obj_list=[instruments[letter](字母,数字)表示字母,数字(在示例列表中)
。字母用于确定应该实例化哪个类并将其作为参数传递,这似乎有些奇怪。@jornsharpe是的……或者类似于:
[instruments[letter](字母,*args)表示字母,*args表示示例列表中的字母]
。。。(如果不是真的需要,
字母
参数可以直接删除……)