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表示示例列表中的字母]
。。。(如果不是真的需要,字母
参数可以直接删除……)