我知道如何使用循环创建同一个类的多个对象,类似于此 How to create multiple class objects with a loop in python? 但是,我想要的是不同的,因为每个对象都必须用不同的参数初始化 我的程序现在从文件中读取所有信息(参数)并将它们存储在 python 字典中,如下所示:
objects={'obj1':['object1','Tom',10],'obj2':['object2','John',13]}
并且因为所需对象的数量取决于在文件中找到的信息.. 我想知道是否有一种方法可以自动创建(可能通过使用循环!)多个类对象并使用不同的参数初始化它们。而不是按如下方式声明它们:
obj1 = MyClass('object1','Tom',10)
obj2 = MyClass('object2','John',13)
.
.
.
etc
最佳答案
>>> objects={'obj1':['object1','Tom',10],'obj2':['object2','John',13]}
>>> instances = []
>>> for name, args in objects.items():
inst = MyClass(*args)
instances.append(inst)
或者直接:
>>> [MyClass(*args) for name, args in objects.items()]
[<MyClass: object1, Tom, 10>, <MyClass: object2, John, 13>]
或者更简单,忽略名称:
>>> [MyClass(*args) for args in objects.values()]
[<MyClass: object1, Tom, 10>, <MyClass: object2, John, 13>]
或返回字典(适用于 Python 2.7+)
>>> {name: MyClass(*args) for name, args in objects.items()}
{'obj1': <MyClass: object1, Tom, 10>, 'obj2': <MyClass: object2, John, 13>}
如果你有动态数量的参数来创建你的实例,这甚至会起作用(假设你的类构造函数可以处理这个可变数量 - 使用默认值)
使用itertools.starmap
>>> from itertools import starmap
>>> list(starmap(MyClass, objects.values())
[<MyClass: object1, Tom, 10>, <MyClass: object2, John, 13>]
关于python - 使用不同的参数创建一个类的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191981/