Mi sono reso conto che domande del tutto simili sono state fatte, anche se non esattamente in questo modo.C'è un modo decente di creare un costruttore di copia in python?
Mi piacerebbe avere un argomento facoltativo per il costruttore della mia classe che, se è un'istanza della mia classe, verrà copiato. Ad esempio, una cosa del genere (So che questo codice non funziona!):
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
So che ci sono un paio di soluzioni pratiche per questo. Potrei impostare ogni attributo di sé in base al valore dell'attributo corrispondente di foo, ma ciò sarebbe davvero fastidioso perché la mia classe ha molti, molti attributi. O potrei semplicemente usare fare:
b = copy.deepcopy(a)
... Ma preferirei non se è possibile. Spero anche di evitare di scavalcare lo __new__
.
c'è davvero nessun modo decente a tutti in python per creare un costruttore di copia?
perché non farlo vuoi usare b = copy.deepcopy (a)? Voglio dire, se funziona, e non ci vogliono più righe per scrivere di b = Foo (a) .... – DGH
Beh, suppongo che le mie dita siano ancora incrociate che un costruttore di copie sia fattibile. E francamente, perché non lo è? Non è come se fosse una richiesta davvero insolita. Si potrebbe pensare che tutti i linguaggi orientati agli oggetti abbiano questa caratteristica. – carmenism
Perché non è una funzione? Perché è solo zucchero sintattico, un modo diverso per dire esattamente la stessa cosa. Finché esiste la funzionalità per fare una copia profonda con una sola linea di codice molto semplice, perché è importante se si tratta di un "costruttore" o no? – DGH