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

标签 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 

最佳答案

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

相关文章:

python - 是否可以在 python 多处理中重新启动已经终止的进程?

python - python解释器如何在下面的代码中逐行运行代码?

python - 决策树显示没有达到我想要的效果

python - 合并 pandas.DataFrame 上的每两列

python - 并行化 np.searchsorted

python - 插入使用M2Crypto的代码时,_shutdown AttributeError(忽略)

python:将ascii字符转换为 boolean 数组

python - 导入语句后包内的模块不可用

python - 使用Python找出两个excel中丢失的交易

python - 使用必须导入其他模块的模块运行 unittest