如何将类实例的所有属性复制到新实例

时间:2017-08-29 14:39:12

标签: python class

如何将类的所有属性复制到类的新实例。 在下面的例子中,使用python的工作方式,当我使用b = a时,它将b和a分配给相同的内存地址。当我改变" b"这也改变了" a。" Both elements of the list are stored at the same address

class test:

    def __init__(self, name="Name",data=[]):
        self.name=name
        self.data=data




list=[]
a = test("First Name",["DATA1","DATA2","DATA3"])
b=a
list.append(a)
list.append(b) 

我想要实现类似于list类允许你这样做的东西,将列表复制到新的内存地址。

list1=[1,2,3]
list2=list(list1)

所以就我而言。

a = test("First Name",["DATA1","DATA2","DATA3"])
b=test(a)

无需

b=test(a.name,a.data)

编辑

我希望获得与

相同的效果
 b=copy.deepcopy(a)

但通过这种用法。

b=test(a)

3 个答案:

答案 0 :(得分:0)

使用copy

import copy
b = copy.deepcopy(a)

答案 1 :(得分:0)

您可能想要编写复制构造函数。例如......

import copy

class Foo:

  def __init__(self, data):
    self._data = data

  @classmethod
  def from_foo(cls, class_instance):
    data = copy.deepcopy(class_instance._data)
    return cls(data)

答案 2 :(得分:0)

这实现了我想要做的事情。

class Test:
    def __init__(self, arg):
        if isinstance(somearg, self.__class__):
            self.__dict__ = somearg.__dict__.copy()
        else:
            self.var = arg

用法:

a=Test(123)
b=Test(a)