Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在尝试用python使用带有字典的类_Python_Python 3.x_Dictionary - Fatal编程技术网

我正在尝试用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