Autre chose à considérer lorsque ce type d'erreur se produit:
Je rencontrais ce message d'erreur et j'ai trouvé ce message utile. Il s'avère que dans mon cas, j'avais remplacé un __init__()
héritage d'objets.
L'exemple hérité est assez long, je vais donc passer à un exemple plus simple qui n'utilise pas l'héritage:
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")
Le résultat est:
<__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 n'a pas saisi cette faute de frappe. Notepad ++ non plus (d'autres éditeurs / IDE pourraient le faire).
Certes, il s'agit d'un typeError "ne prend aucun paramètre", ce n'est pas très différent de "got two" quand on en attend un, en termes d'initialisation d'objet en Python.
Aborder le sujet: un initialiseur de surcharge sera utilisé s'il est syntaxiquement correct, mais sinon il sera ignoré et le intégré sera utilisé à la place. L'objet ne s'attend pas / ne gère pas cela et l'erreur est levée.
Dans le cas de l'erreur sytax: Le correctif est simple, il suffit de modifier l'instruction init personnalisée:
def __init__(self, name):
self.name = name
self
. Donc, déclarerdef method(arg):
est faux pour une méthode, ça devrait l'êtredef method(self, arg):
. Lorsque la méthode dispatch essaie d'appelermethod(arg):
et de faire correspondre deux paramètresself, arg
avec elle, vous obtenez cette erreur.