我意识到有人提出了与此非常相似的问题,尽管不完全是这样。
我想为我的类的构造函数提供一个可选参数,如果它是我的类的实例,则将复制该参数。例如,类似(我知道这段代码不起作用!):
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
我知道对此有一些实用的解决方案。我可以根据 foo 相应属性的值来设置 self 的每个属性,但这真的很烦人,因为我的类有很多很多属性。或者我可以简单地使用 do:
b = copy.deepcopy(a)
...但如果可能的话我宁愿不这样做。我也希望避免覆盖__new__
.
python 中真的没有像样的方法来创建复制构造函数吗?
我认为这是最Pythonic的方法——复制工厂方法。
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
这在 python 基本类型中相当常见(例如dict.copy
)。它不是一个复制构造函数,但我不认为这是一个非常Pythonic的概念!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)