使用不同的参数创建类的多个对象

时间:2014-06-12 19:00:54

标签: python

我知道如何使用循环创建同一类的多个对象,类似于此 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 

3 个答案:

答案 0 :(得分:4)

>>> 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>]

答案 1 :(得分:1)

objects={'obj1':['object1','Tom',10],'obj2':['object2','John',13]}
class MyClass():
  def __init__(self, var1, var2, var3, *args):
    self.var1 = var1
    self.var2 = var2
    self.var3 = var3

for i in objects.keys():
  my_class = MyClass(*objects[i])
  print my_class.__dict__

{'var1': 'object1', 'var3': 10, 'var2': 'Tom'}
{'var1': 'object2', 'var3': 13, 'var2': 'John'}

答案 2 :(得分:0)

您可以做的一件事是创建一个包含所有新MyClass个对象的列表,如下所示:

class_objects = []
for o in objects.values():
    class_objects.append(MyClass(o[0], o[1], o[2]))

这会生成一个名为class_objects的列表,其中包含文件中的所有MyClass个对象。