在Python 2中,使用类或对象而不是字典

10 浏览
0 Comments

在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\' 等来访问它们。

0
0 Comments

在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']

然而,使用类或对象可以更简洁地实现相同的功能。通过在"学生"类中添加一个成绩属性,并在"作业"类中添加一个获取学生成绩的方法,可以更方便地获取每个学生的成绩。

使用类或对象而不是字典可以提高代码的可读性、可维护性和灵活性。通过使用类和对象,可以更好地组织和管理数据,并且可以更方便地扩展功能。

0
0 Comments

在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中,使用类或对象而不是字典可以提高代码的可读性和可维护性。通过使用类和对象,可以更好地组织和管理代码,并提供更清晰的表示和更简洁的代码逻辑。

0