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的概念!
| 归档时间: |
|
| 查看次数: |
10349 次 |
| 最近记录: |