Ich habe eine Klasse mit einer __init__
Funktion.
Wie kann ich einen ganzzahligen Wert von dieser Funktion zurückgeben, wenn ein Objekt erstellt wird?
Ich habe ein Programm geschrieben, in dem __init__
Befehlszeilen analysiert werden, und ich muss einen Wert festlegen. Ist es in Ordnung, es in eine globale Variable zu setzen und es in anderen Mitgliedsfunktionen zu verwenden? Wenn ja, wie geht das? Bisher habe ich eine Variable außerhalb der Klasse deklariert. und das Einstellen einer Funktion spiegelt sich nicht in einer anderen Funktion wider?
__init__
; Wir können Ihnen helfen, wenn Sie beschreiben, was Sie wirklich erreichen möchten.Antworten:
__init__
ist erforderlich, um None zurückzugeben. Sie können (oder sollten zumindest nicht) etwas anderes zurückgeben.Versuchen Sie, eine Instanzvariable (oder Funktion) zurückzugeben.
quelle
new
hier Istnew
in Python impliziert? Ich nahm an, dass Pythons Semantik sich von Java und den anderen Sprachen unterscheidet, die dieses Wort verwenden.super().__init__
der abgeleiteten Klasse zu übergeben, ohne sie über eine Instanzvariable weiterleiten zu müssen.Warum willst du das tun?
Wenn Sie beim Aufrufen einer Klasse ein anderes Objekt zurückgeben möchten, verwenden Sie die folgende
__new__()
Methode:quelle
__init__
Sie Ihrer Klasse einige neue optionale Parameter hinzufügen , stellen Sie fest, dass Sie eine Klassenfactory benötigen, die Instanzen spezialisierter Unterklassen zurückgibt, um die gewünschte Flexibilität zu gewährleisten. Die Benutzer Ihrer Bibliothek verwenden jedoch bereits Ihre vorhandene API. Um dies beizubehalten, überschreiben Sie die__new__
Rückgabe von Instanzen Ihrer speziellen Unterklassen.datetime
Moduls aus der Standardbibliothek. Es verwendet__new__
genau auf diese Weise.Aus der Dokumentation von
__init__
:Als Beweis dieser Code:
Gibt diesen Fehler:
quelle
Beispiel Die Verwendung der betreffenden Angelegenheit kann wie folgt sein:
Ich habe nicht genug Ruf, also kann ich keinen Kommentar schreiben, es ist verrückt! Ich wünschte, ich könnte es als Kommentar an weronika posten
quelle
self
ist nicht definiert in__new__(cls, Item)
Die
__init__
Methode gibt wie andere Methoden und Funktionen standardmäßig None zurück, wenn keine return-Anweisung vorhanden ist. Sie können sie also wie folgt schreiben:Aber natürlich
return None
bringt Ihnen das Hinzufügen von nichts.Ich bin mir nicht sicher, wonach Sie suchen, aber Sie könnten an einem dieser Punkte interessiert sein:
Drucke:
quelle
f = Foo().value
__init__
.__init__
gibt nichts zurück und sollte immer zurückkehrenNone
.quelle
Sie können es einfach auf eine Klassenvariable setzen und aus dem Hauptprogramm lesen:
quelle
Ich wollte nur hinzufügen, dass Sie Klassen in zurückgeben können
__init__
Mit der obigen Methode können Sie eine bestimmte Aktion für eine Ausnahme in Ihrem Test implementieren
quelle
super().__init__
kehrt zurückNone
, also kehren Sie zurückNone
, was in Ordnung, aber überflüssig ist.init () gibt keinen perfekt gelösten Wert zurück
Ausgabe: Meine Geschwindigkeit beträgt 21 kmh
quelle
Wenn Sie sich nicht mehr für die Objektinstanz interessieren, können Sie sie einfach ersetzen!
quelle
self
in diesem Konstruktor zugewiesen ist .