在Python中创建任意对象的副本并调用构造函数

时间:2013-11-06 04:19:47

标签: python python-2.7

我有从A继承的课程BCFoo。他们的__init__方法都做了不同的事情,但有一个类似的签名:它们都在i中使用了一个参数__init__。这些类的一些实例位于列表l中,并且全部混合在一起。在l中,所有对象都有i=1

我需要浏览l,对于我看到的每个对象,我需要创建相同的对象,但使用i=2而不是i=1进行实例化。

我该怎么做?

我试过了:

l2 = []
for obj in l:
    obj_2 = type (obj).__init__(2)
    l2.append(obj_2)

但它不起作用。

1 个答案:

答案 0 :(得分:2)

我不确定“创建同一个对象”是什么意思。如果您的意思是“创建一个同类型的全新独特对象”,那么试试这个:

obj_2 = type (obj)(2)

您的代码,重写为列表理解:

l2 = [type(obj)(2) for obj in l]