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 » ?

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 » ?

Patricia Arquette
Libérer: 2024-12-14 04:00:14
original
754 Les gens l'ont consulté

Why Does My Python Method Throw a

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)
Copier après la connexion

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")
Copier après la connexion

Comme vous pouvez le voir, la méthode attend deux arguments :

  • my_object, qui fait référence à l'instance sur laquelle la méthode est appelée. .
  • arg, qui reçoit l'argument fourni par l'appelant, dans ce cas, "foo".

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")
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal