python - 我正在尝试将类与 python 字典一起使用

标签 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)

    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)

当我运行代码时,出现错误:

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

我尝试过多种方法来做到这一点。我是否仅限于使用列表?

最佳答案

这是因为你无法返回 Python 中的赋值结果:

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

所以你需要分开分配和返回:

def dicts(self):
    grade[self.name]=self.grades
    return grade

请注意,当您尝试调用此函数时,这将引发 NameError(除非您有一个名为 grade 的全局变量)。但您可能指的是 self.grade:

def dicts(self):
    self.grade[self.name]=self.grades
    return self.grade

这反过来会永久改变您的 self.grade 字典。如果您不想这样做,可以在分配之前创建一个副本:

def dicts(self):
    grade = self.grade.copy()
    grade[self.name]=self.grades
    return grade

关于python - 我正在尝试将类与 python 字典一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41246595/

相关文章:

javascript - 使用 JavaScript json 文件初始化 C# 字典的正确方法?

python :SomeStingLikeThis 到 some_string_like_this

python - 从 Pandas 获取其他类别的聚合

Python 2.7 pip UnicodeDecodeError

python-3.x - 这段代码是什么意思? (训练测试拆分 Scikit Learn)

python - 打印列表中的所有项目,它们之间有两个空格

ios - 如何在 UITableView iOS Swift 中加载数组值 int cell 而不创建多个自定义单元格?

python - Interactive Brokers API - 如何断开 IB 网关的现有连接并使用 Python 建立新连接?

python - 美丽的序列

c# - 使用 LINQ 按一个字段分组,基于组求和并存储在字典中