有没有一种在python中创建拷贝构造函数的好方法?

car*_*ism 10 python deep-copy copy-constructor

我意识到与此问题非常相似的问题,尽管不是这样.

我想为我的类的构造函数提供一个可选参数,如果它是我的类的实例,将被复制.例如,像(我知道这段代码不起作用!):

class Foo(object):
    def __init__(self, foo=None):
        self.x = None
        self.y = None
        self.z = None

        if foo is not None and isinstance(foo, Foo):
            self = copy.deepcopy(foo)

a = Foo()
a.x = 1
a.y = 2
a.z = 3

b = Foo(a)
print b.x
print b.y
print b.z
Run Code Online (Sandbox Code Playgroud)

我知道有一些实用的解决方案.我可以根据foo的相应属性的值设置self的每个属性,但这会非常烦人,因为我的类有很多很多属性.或者我可以简单地使用do:

b = copy.deepcopy(a)
Run Code Online (Sandbox Code Playgroud)

......但如果可能,我宁愿不要.我也希望避免压倒一切__new__.

在python中创建一个复制构造函数真的没有办法吗?

Nic*_*ood 16

我认为这是最狡猾的方式 - 复制工厂方法.

import copy

class Foo(object):
    def __init__(self):
        self.x = None
        self.y = None
        self.z = None
    def copy(self):
        return copy.deepcopy(self)

a = Foo()
a.x = 1
a.y = 2
a.z = 3

b = a.copy()
print b.x
print b.y
print b.z
Run Code Online (Sandbox Code Playgroud)

这在python基本类型中很常见(例如dict.copy).它不是复制构造函数,但我认为这不是一个非常pythonic的概念!