Comment appeler une fonction de classe depuis une autre fonction de classe
Kangoo
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir,
J'ai une petite question de syntaxe qui me bloque dans mon projet. En effet, je souhaite qu'une fonction propre à une classe appelle une autre fonction de cette même classe mais je tombe sur un message d'erreur de type ''missing 1 required positional argument: ". Pouvez-vous m'aider svp ?
Voici un exemple de code illustrant le problème :
Merci d'avance !
Kangoo
J'ai une petite question de syntaxe qui me bloque dans mon projet. En effet, je souhaite qu'une fonction propre à une classe appelle une autre fonction de cette même classe mais je tombe sur un message d'erreur de type ''missing 1 required positional argument: ". Pouvez-vous m'aider svp ?
Voici un exemple de code illustrant le problème :
from tkinter import * # Importe Tkinter ######################## class MaClasse(): # Classe def __init__(self,name): # Constructeur self.name = name def fct2(self, name): # Retourne le nom du btn return self.name def fct1(self, name): # Création du bouton self=Button(root,text=name,command=self.fct2) self.pack() ######################## root=Tk() # Fenêtre btn=MaClasse('Hello') # Instance de MaClasse btn.fct1(btn.name) root.mainloop()
Merci d'avance !
Kangoo
A voir également:
- Appeler une classe dans une autre classe - python
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appeler en privé - Guide
- Citizen code python avis - Accueil - Outils
- Bluetooth mercedes classe a - Forum Autoradio
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Excel
4 réponses
Bonjour,
D'après ce que je vois lorsque tu appelles ta méthode de classe fct1 (que tu appelles fonction de classe) tu en appelles une autre (fct2) mais sans argument quand tu mets command = self.fct2. Il manque effectivement l'argument name.
D'après ce que je vois lorsque tu appelles ta méthode de classe fct1 (que tu appelles fonction de classe) tu en appelles une autre (fct2) mais sans argument quand tu mets command = self.fct2. Il manque effectivement l'argument name.
Kangoo
Le problème lorsque j'écris
, c'est que la fonction fct2() s’exécute immédiatement et n'attend pas que je clique sur le bouton. Comment faire pour régler cela ?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
à quoi sert le second paramètre de la fonction fct2?
à quoi sert le second paramètre de la fonction fct2?
Je viens de trouver une solution mais elle n'est pas très esthétique. Je passe par une troisième méthode qui ne nécessite pas de préciser de paramètre, et dont le but est de lancer fct2. Voici le code.
Peut-être y a-t'il une technique plus "propre" ?
from tkinter import * # Importe Tkinter ######################## class MaClasse(): # Classe def __init__(self,name): # Constructeur self.name = name def fct2(self, name): # Retourne le nom du btn print (self.name) def fct3(self): self.fct2(self.name) def fct1(self, name): # Création du bouton self=Button(root,text=name,command=self.fct3) self.pack() ######################## root=Tk() # Fenêtre btn=MaClasse('Hello') # Instance de MaClasse btn.fct1(btn.name) root.mainloop()
Peut-être y a-t'il une technique plus "propre" ?
Bonsoir,
Nomme ta classe et ses méthodes correctement, des fct* ne correspond aucunement à ce que ces méthodes sont censées faire.
Si ta classe est supposée représenter un bouton tkinter avec des options prédéfinies, alors fais lui hériter de Button.
Là en l'état on ne comprend pas pourquoi dans ta classe tu as besoin de passer en paramètre name qui est déjà connu.
Maintenant lorsqu'on a besoin de passer des paramètres à une fonction à fournir dans un paramètre d'une autre fonction, on utilise une fonction anonyme.
C'est le genre de chose à utiliser avec parcimonie.
Nomme ta classe et ses méthodes correctement, des fct* ne correspond aucunement à ce que ces méthodes sont censées faire.
Si ta classe est supposée représenter un bouton tkinter avec des options prédéfinies, alors fais lui hériter de Button.
Là en l'état on ne comprend pas pourquoi dans ta classe tu as besoin de passer en paramètre name qui est déjà connu.
Maintenant lorsqu'on a besoin de passer des paramètres à une fonction à fournir dans un paramètre d'une autre fonction, on utilise une fonction anonyme.
def execute(func): func() def test(arg): print(arg) execute(lambda: test('test'))
C'est le genre de chose à utiliser avec parcimonie.