0
votes

Comment travailler avec deux arguments dans les méthodes de classe Python

J'essaye de créer une nouvelle méthode nommée feedback dans ma classe. Il devrait prendre un argument nommé grade avec soi. Quand j'exécute le programme, il affiche l'exception: praise () manquant 1 argument positionnel requis: 'self'

J'ai essayé de mettre deux arguments dans la méthode de feedback.

def praise(self):
    if self.name:
        return "You inspire me, {}".format(self.name)

def reassurance(self):
    if self.name:
        return "Chin up, {}. You'll get it next time!".format(self.name)
def feedback(self, grade):
    if self.name and grade > 50:
        return Student.praise()
    else:
        return Student.reassurance()

Si la note est supérieure à 50, elle doit renvoyer le résultat de la méthode de louange. S'il est inférieur ou égal à 50, il doit renvoyer le résultat de la méthode de réassurance.


2 commentaires

Est-ce que Student est votre nom de classe? où est défini self.name? Pouvez-vous modifier votre question pour inclure un exemple complet?


Oui, le nom de ma classe est Student et le nom est également défini à l'intérieur. Désolé, je n'ai pas pu inclure cette partie dans le code


3 Réponses :


0
votes

Pour appeler une méthode d'instance (une avec self comme premier paramètre implicite), vous devez en fait l'appeler sur une instance. Ici, Student est le type de classe, pas l'instance. L'instance est self , qui est transmise implicitement.

Solution:

if self.name and grade > 50:
    return self.praise()
else:
    return self.reassurance()


0 commentaires

0
votes

Lorsque vous appelez Student.praise () , il s'agit d'une méthode indépendante , donc self n'est pas défini. C'est l'argument positionnel requis qui vous manque. Vous pouvez soit l'appeler indépendant et passer self (non préféré):

Student.praise(self)

Ou (de préférence), appelez-le simplement comme une méthode liée:

self.praise()


0 commentaires

0
votes

Voici une classe complète, très similaire à votre code:

class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def praise(self):
        return f"You inspire me, {self.name}."

    def reassurance(self):
        return f"Chin up, {self.name}. You'll get it next time!"

    def feedback(self):
        if self.grade > 50:
            return Student.praise(self)
        else:
            return Student.reassurance(self)

Bob = Student('Bob', 60)
Jen = Student('Jen', 40)
print(Bob.feedback())
print(Jen.feedback())

> You inspire me, Bob.
> Chin up, Jen. You'll get it next time!

Ou, comme d'autres l'ont dit, utilisez self.praise () et self.reassurance () au lieu de Student.praise ( self) ou Student.reassurance (self).


0 commentaires