Maison >développement back-end >Tutoriel Python >Pourquoi ma méthode Python génère-t-elle une erreur « TypeError : method() prend 1 argument de position mais 2 ont été donnés » ?
Arguments de déstructuration dans les méthodes Python : démêler le "TypeError : méthode() prend 1 argument de position mais 2 ont été donnés" Énigme
Lors de la tentative pour invoquer une méthode de classe en Python, vous pourriez rencontrer le déroutant "TypeError: method() prend 1 argument de position mais 2 ont reçu une erreur, même s'il semble qu'un seul argument ait été transmis. Pour résoudre cette énigme, approfondissons le comportement des méthodes Python et le concept de déstructuration des arguments.
En Python, les méthodes de classe fonctionnent différemment de leurs homologues dans certains langages de programmation. Lors de l'appel d'une méthode de classe, la signature de la méthode dans la définition de la classe définit le nombre de paramètres qu'elle attend, y compris l'argument self.
Dans l'extrait de code fourni :
class MyClass: def method(arg): print(arg)
La méthode attend un seul argument qui, du point de vue de l'appelant, est transmis sous la forme my_object.method("foo"). Cependant, Python effectue une certaine déstructuration syntaxique en arrière-plan avant l'exécution de la méthode. Il traduit la syntaxe de l'appelant en :
MyClass.method(my_object, "foo")
Comme vous pouvez le voir, la méthode attend deux arguments :
Python fournit automatiquement le premier argument à la méthode, qui est l'objet lui-même. C'est pourquoi vous recevez le message d'erreur lorsque votre appelant tente de transmettre un argument supplémentaire, ce qui donne un total de deux arguments.
Pour les méthodes qui doivent accéder à l'instance à laquelle elles appartiennent, l'argument self est essentiel . Il permet à la méthode d'interagir avec des données spécifiques à l'instance ou d'effectuer des tâches liées à l'état de l'objet.
Pour gérer les cas où l'accès à l'instance n'est pas requis, Python fournit le décorateur @staticmethod. Ce décorateur supprime le passage implicite de l'argument self.
Comme démontré dans l'extrait de code fourni :
class MyOtherClass: @staticmethod def method(arg): print(arg) my_other_object = MyOtherClass() my_other_object.method("foo")
La méthode de MyOtherClass ne nécessite pas d'accès à l'instance, vous permettant de appelez-le sans passer d'auto-argument.
Comprendre le comportement des méthodes de classe et la déstructuration des arguments est crucial pour résoudre ce type d'erreur et écrire du code robuste dans Python.
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!