2012-03-26 3 views
3

Ich mag mein eigenes Kopiermethode für eine Klasse A implementieren, die wie folgt aussieht:Wie überspringen Sie die Initialisierung beim Kopieren von Objekten in Python?

class A(object): 
    def __init__(self): 
     self.field1 = generate_a_list_of_ints() 
    def __copy__(self): 
     result = A() 
     result.fiel1[:] = self.field1[:] 
     return result 

Das Problem mit dem Code oben, dass, wenn ein A-Objekt zu kopieren, wird der Code für die Initialisierung auch dann aufgerufen werden, obwohl es keine Notwendigkeit, die Anfangswerte zu erhalten.

Wie kann ich das Feld1 kopieren, ohne Initialisierungscode auszuführen? Ich suchte nach Informationen über __new__, aber das meiste davon bezog sich auf Fabriken und Dinge, die nichts miteinander zu tun hatten, daher ist es mir immer noch unklar, wie man die Initialisierung überspringt.

Antwort

2

Ich schlage vor, ein optionales Argument in Ihrem __init__() Verfahren, etwa so:

class A(object): 
    def __init__(self, init=True): 
     if init: 
      self.field1 = generate_a_list_of_ints() 
    def __copy__(self): 
     result = A(init=False) 
     result.fiel1[:] = self.field1[:] 
     return result 
+0

Ja, das ist eine gute Idee. Vielen Dank. Ich werde noch etwas warten, bevor ich akzeptiere, nur für den Fall. – Abdallah