Python Object-Oriented Python Instant Objects Method Interactivity

Michael Hoffmann
Michael Hoffmann
1,801 Points

Code runs fine in Visual Studio Code - why is it giving me an error?

class Student: name = "Michael" grade = True def praise(self): return "You inspire me, {}".format(self.name)

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

def feedback(self, grade):
    if self.grade > 50:
        return self.praise()
    if self.grade <= 50:
        return self.reassurance()

Michael = Student() Michael.grade = 80 print(Michael.feedback(True))

Bummer: didnt find the praise message for grade over 50

first_class.py
class Student:
    name = "Michael"
    grade = True
    def praise(self):
        return "You inspire me, {}".format(self.name)

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

    def feedback(self, grade):
        if self.grade > 50:
            return self.praise()
        if self.grade <= 50:
            return self.reassurance()

Michael = Student()
Michael.grade = 80
print(Michael.feedback(True))

2 Answers

KRIS NIKOLAISEN
KRIS NIKOLAISEN
54,335 Points

Since grade isn't an attribute you don't need self:

class Student:
    name = "Michael"
    def praise(self):
        return "You inspire me, {}".format(self.name)

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

    def feedback(self, grade):
        if grade > 50:
            return self.praise()
        if grade <= 50:
            return self.reassurance()

Michael = Student()
print(Michael.feedback(80))
Michael Hoffmann
Michael Hoffmann
1,801 Points

Thank you for being patient with me - I finally got it ;-)

KRIS NIKOLAISEN
KRIS NIKOLAISEN
54,335 Points

grade isn't a boolean or attribute of the class. The numeric value for grade passed in to the feedback method should be the value evaluated. To test try

Michael = Student()
print(Michael.feedback(80))
Michael Hoffmann
Michael Hoffmann
1,801 Points

Thanks for your answer, Kris!

This is the code now:

class Student:
    name = "Michael"
    def praise(self):
        return "You inspire me, {}".format(self.name)

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

    def feedback(self, grade):
        if self.grade > 50:
            return self.praise()
        if self.grade <= 50:
            return self.reassurance()

Michael = Student()
print(Michael.feedback(80))

and this yields the following error:

  File "c:/Users/micha/Documents/OOPython/student.py", line 10, in feedback
    if self.grade > 50:
AttributeError: 'Student' object has no attribute 'grade'

So, what do I feed the if > return, in order to check the value 80, if I am not using an attribute?