【问题标题】:How to set up constructor for class with attribute initialized to empty list?如何为属性初始化为空列表的类设置构造函数?
【发布时间】:2021-09-09 11:11:11
【问题描述】:

我必须创建以下类,但我不确定如何设置我的构造函数。

GradeRecords 对象具有以下属性:

  • term :代表当前学期的字符串;
  • grades : 一个包含元组的列表对象,其中每个元组的第一个条目是代表班级代码的字符串,每个元组的第二个条目是满分 100 分,第三个条目是学分数这个课程。 grades 可以初始化为空列表。
  • num_courses :一个 int 值,包含记录中的课程数。
    这可以初始化为 0。

您不能添加更多属性。

此外,GradeRecords 对象具有以下方法:

  • 一种以当前术语为输入并初始化三个属性的初始化方法;
  • add_course,该方法采用表示课程代码的字符串、表示总分 100 分的 int 和学分数的方法。该方法向等级添加一个新元组。

我的代码给了我错误:

g1 = GradeRecords("Fall 2021")
TypeError: __init__() missing 1 required positional argument: 'new_tuple'

谢谢!

    class GradeRecords:
    
        grades = []
        num_courses = 0
    
        def __init__(self, term, new_tuple):
            self.term = term
            
            #create a list from the input new_tuple
            self.grades.append(new_tuple)
            
            GradeRecords.num_courses += len(self.grades)
    
     
        def add_course(self, course_code, grade_100, num_credits):
            new_tuple = (course_code, grade_100, num_credits)
            self.grades.append(new_tuple)
            return grades

【问题讨论】:

  • __init__ 方法不需要“new_tuple”参数,也不应将任何内容附加到“self.grades”,因为作业没有要求。

标签: python class constructor


【解决方案1】:

您班级的 __init__ 有两个参数:termnew_tuple
当您将类的实例设为g1 = GradeRecords("Fall 2021") 时,您为term (="Fall 2021") 提供了一个值,但该对象也在等待new_tuple

因此,要使其正常工作,您应该提供一个元组作为第二个参数,例如:

g1 = GradeRecords("Fall 2021", ("Maths", 90, 10))

不过,在我看来,class 也可以这样写:

class GradeRecords:
    def __init__(self, term):
        self.grades = []
        self.num_courses = 0
        self.term = term        

    def add_course(self, course_code, grade_100, num_credits):
        self.grades.append((course_code, grade_100, num_credits))
        self.num_courses += len(self.grades)
        return self.grades

我们可以这样使用它:

>>> g1 = GradeRecords('Fall 2021')
>>> g1.add_course("Maths", 90, 10)
[("Maths", 90, 10)]
>>> g1.add_course("Physics", 80, 9)
[('Maths', 90, 10), ('Physics', 80, 9)]

【讨论】:

    【解决方案2】:

    您的 __init__ 需要 2 个参数,而只有 1 个参数传递给它,因此如果没有传递任何内容,您可以为 new_tuple 添加一个默认值,并且可以将其称为 g1 = GradeRecords("Fall 2021")。如果您希望将其初始化为其他内容,则可以将其称为g1 = GradeRecords("Fall 2021", ("Course", "<Grade>", "<Credits>"))

    class GradeRecords:
    
        grades = []
        num_courses = 0
    
        def __init__(self, term, new_tuple=("",0,0)):
            self.term = term
            
            #create a list from the input new_tuple
            self.grades.append(new_tuple)
            
            self.num_courses += len(self.grades)
    
     
        def add_course(self, course_code, grade_100, num_credits):
            new_tuple = (course_code, grade_100, num_credits)
            self.grades.append(new_tuple)
            return grades
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2017-08-09
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多