Ist es sicher, ein Self-Objekt durch ein anderes Objekt desselben Typs in einer Methode zu ersetzen?
Möchte ich ersetzen ein Objekt Instanz von einer anderen Instanz innerhalb einer Methode wie diese:
class A:
def method1(self):
self = func(self)
Objekt aus einer Datenbank abgerufen werden.
InformationsquelleAutor der Frage amirouche | 2009-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es unwahrscheinlich, dass anstelle der "selbst" - variable wird vollbringen, was Sie zu tun versuchen, ist, konnte nicht nur erreicht werden, indem das speichern der Ergebnis func(self) in eine andere variable. 'selbst' ist effektiv eine lokale variable ist nur definiert für die Dauer der Aufruf der Methode übergeben, die in der Instanz der Klasse, die betrieben wird auf. Austausch selbst wird nicht tatsächlich ersetzen Sie die Verweise auf die original-Instanz der Klasse statt, die von anderen Objekten, noch wird Sie es schaffen, eine dauerhafte Referenz auf die neue Instanz zugewiesen wurde.
InformationsquelleAutor der Antwort Amber
Ist es nicht eine direkte Antwort auf die Frage, aber in den posts weiter unten gibt es eine Lösung für das, was amirouche zu tun versucht:
Und hier funktioniert code-Beispiel (Python 3.2.5).
Hinweis: die
self.__class__
und nichtself.__class__.__name__
. I. e. diese Technik ist nicht nur ersetzt die Klasse name, aber tatsächlich wandelt eine Instanz einer Klasse (zumindest die beiden von Ihnen haben die gleichenid()
). Auch 1) ich weiß nicht, ob es "sicher zu ersetzen, die ein selbst-Objekt mit einem anderen Objekt des gleichen Typs in ein Objekt selbst] - Methode"; 2) es funktioniert mit verschiedenen Arten von Objekten, nicht nur mit denen, die vom gleichen Typ sind; 3) es funktioniert nicht genau wie amirouche wollte: Sie können nicht init der Klasse wieClass(args)
nurClass()
(ich bin kein Profi und kann nicht beantworten, warum das so ist).InformationsquelleAutor der Antwort 8day
Ja, alles was passieren wird ist, dass Sie nicht in der Lage sein Verweis auf die aktuelle Instanz der Klasse
A
(es sei denn, Sie eine weitere variable zuself
bevor Sie es ändern.) Ich würde nicht empfehlen es wenn, macht es für weniger lesbaren code.Beachten Sie, dass Sie nur die änderung einer variable, wie jede andere. Dabei
self = 123
ist dasselbe wieabc = 123
.self
ist nur eine Referenz auf die aktuelle Instanz innerhalb der Methode. Sie können nicht ändern, Ihre Instanz durch Einstellungself
.Was
func(self)
tun sollten, ist zu ändern Sie die Variablen der Instanz:Dann tun Sie dies:
InformationsquelleAutor der Antwort Blixt
Soweit ich das verstehe, Wenn Sie versuchen, ersetzen Sie das aktuelle Objekt mit einem anderen Objekt gleichen Typs (vorausgesetzt, func wird sich nicht ändern Sie den Objekttyp) aus einer member-Funktion. Ich denke, das wird erreichen, dass
InformationsquelleAutor der Antwort nithin
Kann man die selbst-Zuordnung in eine Methode, ändern Sie die Klasse der Instanz einer abgeleiteten Klasse.
Natürlich konnte man zuordnen, um ein neues Objekt, aber dann ist die Verwendung des neuen Objekts Wellen durch den rest von dem code in der Methode. Reassiging es selbst, der rest von der Methode unberührt.
Aber abgesehen von solchen speziellen Anwendungsfall, ich sehe keine Vorteile zu ersetzen selbst.
InformationsquelleAutor der Antwort Ruben Decrop
Ja, es ist nichts falsch mit diesem. Haters gonna hate. (Betrachten Sie Pycharm mit Ihrem
in most cases imaginable, there's no point in such reassignment and it indicates an error
).Einer situation, wo Sie dies tun könnte, ist:
Sicher, könnte man anfangen, die Methode, die Körper, die durch die Neuzuweisung
self
zu einigen anderen Variablen, aber wenn Sie nicht normalerweise tun, mit anderen Parametern, warum es mitself
?InformationsquelleAutor der Antwort oulenz