TypeError: Methode() nimmt 1 positions-argument, aber 2 waren gegeben
Wenn ich eine Klasse ...
class MyClass:
def method(arg):
print(arg)
... die ich verwenden, um ein Objekt zu erstellen ...
my_object = MyClass()
... auf die ich als method("foo")
wie so ...
>>> my_object.method("foo")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() takes exactly 1 positional argument (2 given)
... warum Python sagen Sie mir, ich gab es zwei Argumente, wenn ich nur gab?
InformationsquelleAutor Zero Piraeus | 2014-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Python:
... ist syntaktischer Zucker, was übersetzt der Dolmetscher hinter den kulissen, in:
... die, wie Sie sehen können, hat in der Tat zwei Argumente - es ist nur so, dass die erste ist die implizite, aus der Sicht des Aufrufers.
Dies ist, weil die meisten Methoden machen etwas mit dem Objekt arbeiten, sind Sie aufgerufen, so muss es irgendeine Weise für dieses Objekt verwiesen werden innerhalb der Methode. Durch Konvention, das erste argument ist genannt
self
innerhalb der Methode definition:Wenn Sie anrufen
method("foo")
auf eine Instanz vonMyNewClass
funktioniert wie erwartet:Manchmal (aber nicht oft), Sie wirklich nicht Pflege über das Objekt das die Methode gebunden ist, und in diesem Umstand, können Sie dekorieren die Methode mit der eingebauten
staticmethod()
- Funktion, um so zu sagen:... in welchem Fall Sie nicht brauchen, um hinzuzufügen, ein
self
argument für die Methode-definition, und es funktioniert immer noch:self
als erstes argument an die Methode löst das problem.InformationsquelleAutor Zero Piraeus
Etwas anderes zu berücksichtigen, wenn diese Art von Fehler ist aufgetreten:
Ich lief in dieser Fehlermeldung und fand diesen Beitrag hilfreich. Stellt sich heraus in meinem Fall hatte ich überschrieben einem init (), wo es war-Objekt Vererbung.
Geerbten Beispiel ist ziemlich lang, also werde ich überspringen, um ein einfaches Beispiel, in dem nicht-Vererbung:
Ergebnis ist:
PyCharm nicht fangen diese Tippfehler. Hab noch Notepad++ (mit anderen Editoren/IDE ' s könnte).
Zugegeben, dies ist ein "keine Parameter" TypeError, es ist nicht viel anders als die "zwei" als erwartet, in Bezug auf die Initialisierung des Objektes in Python.
Thema: Eine überlastung-Initialisierer verwendet wird, wenn syntaktisch korrekt ist, aber wenn nicht wird es ignoriert und die integrierte verwendet. Das Objekt wird nicht erwartet/verarbeiten diese, und der Fehler wird geworfen.
Im Fall der sytax-Fehler: Die Lösung ist einfach, ändern Sie einfach die custom init-Anweisung:
SyntaxError
hier. Der code ist syntaktisch korrekt; es wird einfach nur richtig definiert eine Methode namens___init__
, die niemand jemals zu nennen, statt der speziellen Methode__init__
. Das ist der Grund, warum kein Fehler erkannt wird—weil es nicht zu erkennen.InformationsquelleAutor Jonru2016
Es tritt auf, wenn Sie nicht angeben, die nicht mit Parametern, die die init() oder einer anderen Methode suchen
Beispielsweise
Wenn Sie führen Sie das oben genannte Programm ,es gibt Ihnen eine Fehlermeldung, dass TypeError: __init__() nimmt 1 positions-argument, aber 6 waren gegeben
wie wir können loszuwerden dieser Sache?
nur die übergabe der Parameter ,was init () - Methode der Suche nach
InformationsquelleAutor Trinadh Koya
Pass
cls
parameter in@classmethod
um dieses problem zu beheben.InformationsquelleAutor Ruan Nawe