我正在尝试用python使用带有字典的类
当我运行代码时,我得到一个错误:我正在尝试用python使用带有字典的类,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,当我运行代码时,我得到一个错误: class student(object): def __init__(self, name, age, year): self.name, self.age, self.year = name, age, year self.grades=[] self.grade={} print(name,'-------->','Age:',age,'','Year:',year)
class student(object):
def __init__(self, name, age, year):
self.name, self.age, self.year = name, age, year
self.grades=[]
self.grade={}
print(name,'-------->','Age:',age,'','Year:',year)
def set_grades(self,score):
self.grades.append(score)
def get_grades(self):
return self.grades
def average(self):
return sum(self.grades)/len(self.grades)
def topgrade(self,other):
return max(self.average(),other.average())
def __str__(self):
return str(self.name)+'--'+' Grades:'+str(self.grades)+'---Class average:'+str(self.average())
def dicts(self):
return grade[self.name]=self.grades
todd=student('Todd', 43, 4)
leah=student('Leah', 38,3)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\toddb\Anaconda3\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第714行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\toddb\Anaconda3\lib\site packages\spyderlib\widgets\externalshell\sitecustomize.py”,第89行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/toddb/Desktop/student.py”,第32行
返回等级[self.name]=self.grades
^
SyntaxError:无效语法
我试过几种方法来做到这一点。我是否仅限于使用列表?它是否与
\uuuu init\uuuu
中声明的等级
词典相同??然后它应该说self.grade[self.name]=self.grades
,否则在使用grades
作为字典之前,在dicts
方法中执行此操作grades={}
,这是因为您无法在Python中返回赋值结果:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\toddb\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
execfile(filename, namespace)
File "C:\Users\toddb\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 89, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/toddb/Desktop/student.py", line 32
return grade[self.name]=self.grades
^
SyntaxError: invalid syntax
有效-但一旦您想要退货:
class Test(object):
pass
a = Test()
somevariable = a.attr = 10
甚至更简单:
def func():
a = Test()
return a.testattr = 10
>>> func()
SyntaxError: invalid syntax
因此,您需要拆分分配和返回:
def func():
return a = 0
>>> func()
SyntaxError: invalid syntax
请注意,当您尝试调用此函数时,这将引发一个namererror
(除非您有一个名为grade
的全局变量)。但你的意思可能是自我评分:
def dicts(self):
grade[self.name]=self.grades
return grade
这反过来会永久地改变你的self.grade
字典。如果您不希望,可以在分配前创建副本:
def dicts(self):
self.grade[self.name]=self.grades
return self.grade
将
return grade[self.name]=self.grades
更改为return grade[self.name]
@inspectorG4dget它不需要是self.grade
?@mbomb007:你说得对!那也是:P
def dicts(self):
grade = self.grade.copy()
grade[self.name]=self.grades
return grade