2017-05-02 2 views
1

Ist es in Python möglich, ein Objekt aus bereits instatiated Objekt neu zu erstellen, mit allen seinen Argumente in __init__ Methode übergeben?Erstellen Sie ein neues Objekt aus einem anderen bereits instanziierten Objekt mit den gleichen Argumenten

Ähnlich wie inspect.getcallargs, aber für Klasseninstanzen.

Zum Beispiel:

class A: 
    def __init__(self, some_arg): 
     self.some_arg = some_arg 

def f(a): 
    # somehow get all arguments from `a`, with which it was created 
    # kwargs = ...? 
    # and create a new instance of class with the same (or modified) args: 
    return a.__class__(**kwargs) 

a = A(100) 
new_a = f(a) 
print(new_a.some_arg) 
>>> 100 
+0

Siehe [Hauptzweck von '__repr__' in Python] (http://stackoverflow.com/ Fragen/15661063/Hauptzweck von Repr-in-Python –

Antwort

2

Nein, ist es nicht möglich, weil die Argumente der __init__ Methode verworfen worden sein könnten, verwendet, um andere Werte zu berechnen, oder in einer Vielzahl von unterschiedlichen Weisen gespeichert, wären Es ist unmöglich, eine generische Methode zum Abrufen zu erstellen.

Sie können jedoch eine flexible Objektinitialisierung von voreingestellten konfigurierbaren Parametern erreichen, indem Sie the Factory pattern verwenden, und Sie können vorhandene Objekte kopieren, indem Sie copy.deepcopy verwenden. (Beachten Sie jedoch, dass es bei decopy Edge-Fälle gibt, seien Sie also vorsichtig, wenn Sie sie verwenden, und lesen Sie die Dokumentation)

Verwandte Themen