Envoi d'un attribut de classe à une fonction externe dans l'appel de fonction

J'essaie de généraliser une fonction dans mon script en envoyant l'attribut Class à travers l'appel de fonction à une fonction extérieure, mais puisque je dois appeler l'attribut self.attribute_name dans la classe et < code> object_name.attribute.name en dehors de celui-ci, j'obtiens soit une erreur qu'aucun self.attribute_name n'existe en dehors du code ou que object_name.attribute.name existe à l'intérieur. La partie de mon code concerné est la suivante (c'est juste un fragment du code complet avec beaucoup de parties omises):

class My_Window:
    self.get_info_box = Entry(root)
    self.entry_button = Button(root, text="Choose", command =lambda: self.retrieve_input(self.get_info_box, solitaire.cards))

    def retrieve_input(self, box, entity):
        self.user_input = box.get()
        entity = input_check(box)

def input_check(which_box):   # Function outside class
    my_window.which_box.delete(0, "end")    # This is want I would like to do if it worked 
    return 0   

my_window = My_Window()

Quelque chose dans le fond de ma tête me dit qu'il pourrait être possible d'utiliser à nouveau lambda pour accomplir cela, mais je ne sais toujours pas comment les utiliser correctement et je n'ai pas trouvé de questions actives couvrant ce cas spécifique. Quelqu'un at-il des idées sur la façon de travailler?

0
vous devez créer un exemple minimum qui démontre le problème ... cela ne fait pas ça .... (par exemple, puisque vous n'appelez jamais input_check de grossier, il ne fait rien ...
ajouté l'auteur Joran Beasley, source

2 Réponses

Je pense que ce que tu veux c'est

def input_check(which_box):
    getattr(my_window,which_box).delete(0, "end")
    return 0

input_check("get_info_box")

mais c'est difficile à dire à coup sûr

0
ajouté
OUI, ça a fait l'affaire! Merci beaucoup et désolé pour la question ambiguë, j'ai du mal à formuler correctement ce que je veux dire quand je comprends à peine ce que j'essaie d'expliquer.
ajouté l'auteur Nekroz, source

Essayez-le sans my_window .

def input_check(which_box):
    which_box.delete(0, "end")
    return 0

Incidemment, entity = input_check (boîte) ne fera pas solitaire.cards conserver la valeur retournée par input_check , car l'affectation ne se propage pas vers le haut comme ça. Si vous voulez changer solitaire.cards , vous devrez faire solitaire.cards = input_check (box) à la place. Si solitaire n'est pas visible dans retrieve_input , vous devrez en faire un attribut de self .

0
ajouté
Merci beaucoup pour la réponse, qui a résolu un autre problème que je n'avais même pas encore commencé à résoudre!
ajouté l'auteur Nekroz, source