Etwas anderes, was man beachten sollte, wenn dieser Typ des Fehlers auftritt:
Ich bin auf diese Fehlermeldung gestoßen und fand diesen Beitrag hilfreich. Es stellte sich heraus, dass ich in meinem Fall ein __init__()
überschrieben hatte, wo es Vererbung von Objekten gab.
Das vererbte Beispiel ist ziemlich lang, deshalb werde ich zu einem einfacheren Beispiel überspringen, das keine Vererbung verwendet:
class MyBadInitClass:
def ___init__(self, name):
self.name = name
def name_foo(self, arg):
print(self)
print(arg)
print("Mein Name ist", 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>
NeuFoo
Traceback (most recent call last):
File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in
my_bad_init_object = MyBadInitClass(name="Test Name")
TypeError: object() takes no parameters
PyCharm hat diesen Tippfehler nicht erkannt. Auch Notepad++ nicht (andere Editoren/IDEs könnten es).
Zugegeben, dies ist ein "takes no parameters" TypeError, es unterscheidet sich nicht viel von "got two", wenn man nur einen erwartet, in Bezug auf die Objektinitialisierung in Python.
Zum Thema: Ein überladener Initialisierer wird verwendet, wenn er syntaktisch korrekt ist, ansonsten wird er ignoriert und stattdessen der eingebaute verwendet. Das Objekt erwartet/damit umgeht und der Fehler wird ausgelöst.
Im Fall des Syntaxfehlers: Die Lösung ist einfach, bearbeiten Sie einfach die benutzerdefinierte Init-Anweisung:
def __init__(self, name):
self.name = name