Maison >développement back-end >Tutoriel Python >Pourquoi « TypeError : method() prend 1 argument de position mais 2 ont été donnés » se produit-il même avec un argument explicite ?
"TypeError : method() prend 1 argument de position mais 2 ont été donnés" avec un seul argument transmis
Lorsque vous rencontrez l'erreur "TypeError : method() prend 1 argument de position mais 2 ont été donnés" malgré le passage d'un seul argument, il est important de comprendre l'appel de méthode de Python convention.
En Python, les appels de méthode sont du sucre syntaxique pour une syntaxe plus verbeuse. Lors de l'appel d'une méthode sur un objet, le langage traduit l'appel sous une forme plus explicite, où l'objet devient le premier argument de la méthode.
Par exemple, l'appel suivant :
my_object.method("foo")
est traduit en coulisses par :
MyClass.method(my_object, "foo")
Ici, le premier argument (my_object) est appelé le paramètre self dans la définition de la méthode. Ce paramètre représente l'objet sur lequel la méthode est appelée.
Dans la plupart des cas, les méthodes nécessitent un accès à l'objet sur lequel elles sont appelées. Mais parfois, vous souhaiterez peut-être une méthode qui ne dépend pas de l'objet auquel elle est liée. Dans de tels cas, vous pouvez utiliser la fonction staticmethod() de Python pour décorer la méthode :
class MyOtherClass: @staticmethod def method(arg): print(arg)
Décorer une méthode avec staticmethod() élimine le besoin d'un paramètre self, vous permettant d'appeler la méthode directement sans référence l'objet :
my_other_object.method("foo")
Cela clarifie pourquoi l'erreur que vous avez rencontrée indique que deux arguments ont été fournis. Python interprète l'objet sur lequel vous appelez la méthode (par exemple, my_object dans l'exemple d'origine) comme un premier argument implicite, ce qui entraîne la transmission d'un total de deux arguments.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!