正確にはこの方法ではありませんが、これと非常によく似た質問がなされていることに気づきました。
クラスのコンストラクターに対してオプションの引数が必要です。これは、クラスのインスタンスである場合はコピーされます。たとえば、(このコードが機能しないことはわかっています!):
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の適切な方法は本当にありませんか?