【发布时间】:2020-09-11 10:30:23
【问题描述】:
我尝试创建一个学生类对象,并收集一些数据并显示它:
class Student:
subjects = []
grades = []
d = {}
def __init__(self, name, id):
self.name = name
self.id = id
def addGrade(self, subject, grade):
self.subjects.append(subject)
self.grades.append(grade)
def showGrades(self):
self.d = dict(zip(self.subjects, self.grades))
for subject in self.d:
return subject + ' : ' + str(self.d[subject])
当我尝试添加值时:
stu =Student('Zaki', 23)
stu.addGrade('Math',90)
stu.addGrade('Physicis',95)
stu.addGrade('English',100)
print(stu.showGrades())
输出变为 数学:90
它会忽略其他值!
【问题讨论】:
-
请以与运行时相同的方式缩进代码。 (现在根据可能发生的情况进行了编辑。)
-
顺便说一句,您应该将
subjects = []移动到__init__()中作为self.subjects = []。与grades相同。d = {}也不做任何事情。 -
在我的回答中,我讨论了@quamrana 提出的相同观点。虽然您只有一个实例,但您并没有意识到问题所在。一旦你创建了
Student的第二个实例,你就会发现使用subjects和grades的类变量时会出现问题。 -
可变类变量(或者至少,实际上改变它们)通常是一个坏主意。将它们保存为所有实例都应该相同的常量。
标签: python list dictionary oop zip