Ich habe bemerkt, dass ähnliche Fragen gestellt wurden, wenn auch nicht genau so.
Ich hätte gerne ein optionales Argument für den Konstruktor meiner Klasse, das kopiert wird, wenn es sich um eine Instanz meiner Klasse handelt. Zum Beispiel, etwas wie ( Ich weiß, dass dieser Code nicht funktioniert! ):
%Vor%Ich weiß, dass es ein paar praktische Lösungen dafür gibt. Ich könnte jedes Attribut von self entsprechend dem Wert des entsprechenden Attributs von foo setzen, aber das wäre wirklich ärgerlich, weil meine Klasse viele, viele Attribute hat. Oder ich könnte einfach tun:
%Vor% ... Aber ich würde lieber nicht, wenn das möglich ist. Ich hoffe auch zu vermeiden, __new__
zu überschreiben.
Gibt es in Python überhaupt keinen vernünftigen Weg, einen Kopierkonstruktor zu erstellen?
Ich denke, das ist die pythischste Art, das zu tun - eine Kopierfabrik-Methode.
%Vor% Dies ist in Python-Basistypen ziemlich häufig (zB dict.copy
). Es ist kein Kopierkonstruktor, aber ich denke nicht, dass das ein sehr pythonisches Konzept ist!
Es ist möglich , indem Sie einfach alle Attribute des Quellobjekts durchlaufen, die an __init__
übergeben wurden, und dann setattr()
, die Ihnen am self
wichtig sind. Aber es ist nicht klar, dass dies ein guter Weg wäre, um ein Problem zu lösen. Nicht sehr Pythonic und alle.
Eine gute Möglichkeit besteht darin, eine Kopie des Instanznamespace auf oberster Ebene zu erstellen.
%Vor% Aber sei vorsichtig, wenn deine Klasse sich mit __slots__
befasst, denn in diesem Fall könnte __dict__
fehlen und du musst dich möglicherweise auf neutralere Mechanismen zum Erhalten von Attributen verlassen, wie zum Beispiel getattr()
Tags und Links python deep-copy copy-constructor