Noch etwas zu beachten, wenn diese Art von Fehler auftritt:
Ich bin auf diese Fehlermeldung gestoßen und fand diesen Beitrag hilfreich. Es stellte sich heraus, dass ich in meinem Fall eine __init__()
Objektvererbung überschrieben hatte .
Das geerbte Beispiel ist ziemlich lang, daher gehe ich zu einem einfacheren Beispiel über, bei dem keine Vererbung verwendet wird:
class MyBadInitClass:
def ___init__(self, name):
self.name = name
def name_foo(self, arg):
print(self)
print(arg)
print("My name is", self.name)
class MyNewClass:
def new_foo(self, arg):
print(self)
print(arg)
my_new_object = MyNewClass()
my_new_object.new_foo("NewFoo")
my_bad_init_object = MyBadInitClass(name="Test Name")
my_bad_init_object.name_foo("name foo")
Ergebnis ist:
<__main__.MyNewClass object at 0x033C48D0>
NewFoo
Traceback (most recent call last):
File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in <module>
my_bad_init_object = MyBadInitClass(name="Test Name")
TypeError: object() takes no parameters
PyCharm hat diesen Tippfehler nicht verstanden. Notepad ++ auch nicht (andere Editoren / IDEs könnten).
Zugegeben, dies ist ein TypeError "nimmt keine Parameter". Er unterscheidet sich in Bezug auf die Objektinitialisierung in Python nicht wesentlich von "got two", wenn man einen erwartet.
Adressierung des Themas: Ein Überladungsinitialisierer wird verwendet, wenn er syntaktisch korrekt ist. Andernfalls wird er ignoriert und stattdessen der integrierte Initialisierer verwendet. Das Objekt wird dies nicht erwarten / behandeln und der Fehler wird ausgelöst.
Im Fall des Sytax-Fehlers: Das Update ist einfach. Bearbeiten Sie einfach die benutzerdefinierte init-Anweisung:
def __init__(self, name):
self.name = name
self
. Das Deklarierendef method(arg):
ist für eine Methode falsch, sollte es auch seindef method(self, arg):
. Wenn der Methodenversand versucht,method(arg):
zwei Parameter aufzurufen und abzugleichenself, arg
, wird dieser Fehler angezeigt.