Me doy cuenta de que se han formulado preguntas bastante similares a esta, aunque no exactamente de esta manera.¿Existe alguna forma decente de crear un constructor de copias en python?
Me gustaría tener un argumento opcional para el constructor de mi clase que, si es una instancia de mi clase, se copiará. Por ejemplo, algo así como (Sé que este código no funciona!):
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
Sé que hay algunas soluciones prácticas a esto. Podría establecer cada atributo de uno mismo de acuerdo con el valor del atributo correspondiente de foo, pero esto sería realmente molesto porque mi clase tiene muchos, muchos atributos. O simplemente podría usar do:
b = copy.deepcopy(a)
... Pero prefiero no si eso es posible. También espero evitar anular __new__
.
¿Realmente no hay forma decente en python para crear un constructor de copia?
Por qué no hacer ¿Quieres usar b = copy.deepcopy (a)? Quiero decir, si funciona, y no toma más líneas para escribir que b = Foo (a) .... – DGH
Bueno, supongo que mis dedos todavía están cruzados de que un constructor de copia es factible. Y, francamente, ¿por qué no? No es como si fuera una solicitud realmente inusual. Uno podría pensar que todos los lenguajes orientados a objetos tendrían esta característica. – carmenism
¿Por qué no es una característica? Porque es solo azúcar sintáctico, una forma diferente de decir exactamente lo mismo. Mientras exista la funcionalidad para hacer una copia profunda con solo una línea de código muy simple, ¿por qué importa si es un "constructor" o no? – DGH