在Python 2中,使用类或对象而不是字典
在Python 2中,使用类或对象而不是字典
我通常使用嵌套字典,但我想开始使用类和对象。我有一个作业成绩的列表,格式如下:\n
assignment_name assignment_subject student_name due_date grade grade_pct rank
\n我想创建一个对象,保存所有学生和每个学生的所有作业详情。我的字典将如下所示:\n
homeworks['student_name']['assignment_name'] = {'assignment_subject': 'math', 'due_date': '11/12/13', 'grade': 15, 'grade_pct': 15/20.0, 'rank': 'B'}
\n这应该是一个嵌套类吗?\n
class Homeworks(object): def _init_(self): self.students class Student(object): def _init_(self,student_name): self.student_name = student_name def add_assignment(line): student.assignment_name = line[0] student.assignment_subject = line[1] student.grade = line[4]
\n我知道这不对。我不知道我是否走在正确的道路上。我需要能够访问一个学生的成绩。 (for assignment in Homeworks[\'Robbie Michaels\'].keys(): print Homeworks[\'Robbie Michaels\'][assignment][\'grade\']
) 我还希望能够使用 if assignment_subject == \'math\'
等来访问它们。
在Python 2中,使用类或对象而不是字典的原因是为了更好地组织和管理数据。使用字典可能会导致代码的可读性和可维护性下降。
使用类或对象可以更清晰地定义和封装数据和方法。通过创建一个"作业(Homework)"类和一个"学生(Student)"类,可以更好地表示这两个实体之间的关系。
以下是一个示例代码,展示了如何使用类来代替字典:
class Homework(object): def __init__(self, name, subject): self.assignment_name = name self.assignment_subject = subject self.students = [] def add_student(self, student): self.students.append(student) class Student(object): def __init__(self, student_name): self.student_name = student_name
通过使用类,可以更方便地操作数据。例如,可以创建一个"作业"类的列表,并将每个作业的学生传递给相应的对象。
另外,通过使用类,可以更容易地扩展功能。可以为"学生"类添加成绩属性,以便更方便地获取每个学生的成绩。
对于问题中提到的如何列出一个学生的所有成绩,可以使用以下代码:
for assignment in Homeworks['Robbie Michaels'].keys(): print Homeworks['Robbie Michaels'][assignment]['grade']
然而,使用类或对象可以更简洁地实现相同的功能。通过在"学生"类中添加一个成绩属性,并在"作业"类中添加一个获取学生成绩的方法,可以更方便地获取每个学生的成绩。
使用类或对象而不是字典可以提高代码的可读性、可维护性和灵活性。通过使用类和对象,可以更好地组织和管理数据,并且可以更方便地扩展功能。
在Python 2中,使用类或对象而不是字典是一个常见的问题。这个问题的出现是因为字典在某些情况下可能不够灵活,难以进行扩展和维护。而使用类或对象可以更好地组织和管理代码。
在给出的代码中,问题出现在对作业的表示上。使用字典来表示作业的每个属性,这样在处理作业列表时可能会变得混乱和困难。然而,如果使用类或对象来表示作业,可以更清晰地表达作业的属性和方法,并且可以轻松地进行扩展和维护。
为了解决这个问题,可以将作业表示为一个作业类,并为作业类添加属性和方法。在作业类中,可以使用学生类来表示学生,并将学生对象作为作业的一个属性。这样可以更好地表示作业的关联性和层次结构。
下面是修改后的代码:
class Student: def __init__(self, student_name): self.name = student_name class Homework: def __init__(self, student_name, assignment_name, assignment_subject, grade): self.student = Student(student_name) self.assignment_name = assignment_name self.assignment_subject = assignment_subject self.grade = grade @classmethod def new_hw(cls, line): return cls(line[0], line[1], line[2], line[3]) @classmethod def get_all_grades(cls, student_name, homework_list): return [x.grade for x in homework_list if student_name == x.student.name] lines = [["abc","a","b","A"],["abc","c","d","B"],["ebc","c","d","B"]] hw_list = [Homework.new_hw(line) for line in lines] print Homework.get_all_grades("abc", hw_list)
通过使用类和对象,代码变得更加清晰和易于理解。作业类表示了作业的属性和方法,并且通过使用学生类来表示学生,可以更好地表示作业和学生之间的关系。此外,作业类中的方法可以更好地组织和管理代码。
在Python 2中,使用类或对象而不是字典可以提高代码的可读性和可维护性。通过使用类和对象,可以更好地组织和管理代码,并提供更清晰的表示和更简洁的代码逻辑。