But the self.grades variable is just a list with 2 Grade objects in it.
print(S.grades)
Output:
[<__main__.Grade object at 0x7f150a301668>, <__main__.Grade object at 0x7f150a3016a0>]
And if I try to do any kind of calculation on these Grade objects I get an error
S.grades[0] + S.grades[1]
Output:
File "script.py", line 25, in <module>
S.grades[0] + S.grades[1]
TypeError: unsupported operand type(s) for +: 'Grade' and 'Grade'
I get the same error if I try to do the calculation in the get_average method in the Student Class.
Could you maybe provide an example of how I could preform calculations on these objects?
grades is a list containing Grade objects as you’ve mentioned. You need to access the property of the Grade object that contains the value. You are almost there with S.grades[0]. That is the first grade object. How do you access its property?
Hint
class Grade:
def __init__(self, score):
self.score = score
^^^^^
Thanks @midlindner,
This really did help, but it still took me a long time to figure out I was looking for S.grades[0].score
I am definitely going to need some more time to get a handle on classes.
Since we are instantiating a Grade class within the argument of the add_grade() method, it doesn’t get assigned as a referable instance except by accessing the grades instance variable (the list of grades).
pieter.add_grade(Grade(100))
def get_grades(self):
return [x.score for x in self.grades]
You’ll want to append Grade objects (instances of the Grade class) not just the score. If all we want to append is the score, there’d be no point in creating Grade objects.
I also fought with the solution to the average score section of this Review. I read all the posts here and came up with this solution. I’m still not feeling like I fully understand this lesson, but I am learning a lot, and I am happy to get this working!
Under “class Student:”
def get_average(self):
#var. to hold scores as added
temp = 0
#var. to get length of how many scores are in grades
avgl = len(self.grades)
#var. to limit number of loops for while loop
counter = 0
while counter < avgl:
#adds each score to the total. The counter var will advance and allow access to each list item.
temp += self.grades[counter].score
#advances count for loop
counter += 1
#calculate average of scores
avg = temp / avgl
return avg