Heim >Backend-Entwicklung >Python-Tutorial >Warum wirft meine Python-Methode den Fehler „TypeError: method() nimmt 1 Positionsargument, aber es wurden 2 angegeben' aus?
Argumente in Python-Methoden zerstören: Das Rätsel „TypeError: method() braucht 1 Positionsargument, aber 2 wurden angegeben“ enträtseln
Beim Versuch Um eine Klassenmethode in Python aufzurufen, stoßen Sie möglicherweise auf die verwirrende Meldung „TypeError: method() benötigt 1 Positionsargument, aber 2.“ wurden gegeben“-Fehler, obwohl scheinbar nur ein Argument übergeben wurde. Um dieses Rätsel zu lösen, befassen wir uns mit dem Verhalten von Python-Methoden und dem Konzept der Argumentdestrukturierung.
In Python funktionieren Klassenmethoden anders als ihre Gegenstücke in einigen Programmiersprachen. Beim Aufrufen einer Klassenmethode definiert die Methodensignatur innerhalb der Klassendefinition die Anzahl der erwarteten Parameter, einschließlich des Arguments self.
Im bereitgestellten Codeausschnitt:
class MyClass: def method(arg): print(arg)
Die Methode erwartet ein einzelnes Argument, das aus Sicht des Aufrufers als my_object.method("foo") übergeben wird. Allerdings führt Python im Hintergrund einige syntaktische Destrukturierungen durch, bevor die Methode ausgeführt wird. Es übersetzt die Syntax des Aufrufers in:
MyClass.method(my_object, "foo")
Wie Sie sehen können, erwartet die Methode zwei Argumente:
Python liefert automatisch das erste Argument an die Methode, das das Objekt selbst ist. Aus diesem Grund erhalten Sie die Fehlermeldung, wenn Ihr Aufrufer versucht, ein zusätzliches Argument zu übergeben, was zu insgesamt zwei Argumenten führt.
Für Methoden, die auf die Instanz zugreifen müssen, zu der sie gehören, ist das Argument self unerlässlich . Dadurch kann die Methode mit instanzspezifischen Daten interagieren oder Aufgaben ausführen, die sich auf den Zustand des Objekts beziehen.
Um Fälle zu behandeln, in denen kein Zugriff auf die Instanz erforderlich ist, stellt Python den Dekorator @staticmethod bereit. Dieser Dekorator unterdrückt die implizite Übergabe des self-Arguments.
Wie im bereitgestellten Codeausschnitt gezeigt:
class MyOtherClass: @staticmethod def method(arg): print(arg) my_other_object = MyOtherClass() my_other_object.method("foo")
Die Methode in der MyOtherClass erfordert keinen Zugriff auf die Instanz, sodass Sie dies tun können Rufen Sie es auf, ohne ein self-Argument zu übergeben.
Das Verständnis des Verhaltens von Klassenmethoden und der Argumentdestrukturierung ist entscheidend für die Lösung dieser Art von Fehlern und Schreiben Robuster Code in Python.
Das obige ist der detaillierte Inhalt vonWarum wirft meine Python-Methode den Fehler „TypeError: method() nimmt 1 Positionsargument, aber es wurden 2 angegeben' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!