来自另一个类的属性未附加到列表并打印

时间:2017-05-02 02:32:03

标签: python class object attributes append

所以我很难搞清楚这一点,我做了两个课程,一个叫做课程,一个叫做成绩单。

我在Transcript类中有一个名为" add_course"并且它应该将提供给它的课程附加到一个名为" course"被设置为" self.courses"。

问题是当我在添加一些测试课程后打印Transcript课程时,它只会打印" Transcript:"没有添加任何东西。

class Course:
    def __init__(self, number, credit, grade):
        #validgrades = ['A','B','C','D','F','IP']
        #if grade not in validgrades:
            #raise CourseError("bad grade" + "'" + grade + "'" )
        self.number = number #string
        self.credit = credit #int
        self.grade = grade #string
    def __str__(self):
        return ('%s: credit %d, grade %s' % (self.number, self.credit, self.grade))
    def __eq__(self,other):
        return self.number==other.number and self.credit==other.credit and self.grade==other.grade
    def is_passing(self):

        if self.grade == 'F' or self.grade == 'IP':
            return False
        else:
            return True
c1 = Course("CS112",4,"A")
print(c1)
print(c1.is_passing())
c2 = Course("ENGH101", 3, "B")
print(c1==c2)
c3 = Course("MATH113", 4, "IP")

class Transcript:

    def __init__(self):
        courses = []
        self.courses = courses


    def __str__(self):
        strtrans=""
        strtrans +='Transcript:\n'
        for i in self.courses:
            strtrans+= '%s\n\t' %(i)
        return strtrans

    def __eq__(self,other):
        if self.courses == other.courses:
            return True
        else:
            return False
    def add_course(self,course):
        for i in self.courses:
            self.courses.append(course)

    def course_by_number(self, number):
        for i.number in self.courses:
            if self.number == number:
                print('It worked!')
                return True
            elif self.number == None:
                return None
            else:
                return False
t=Transcript()
print(t)
t.add_course(c1)
t.add_course(c2)
t.add_course(c3)
print(t)

输出为:

CS112:4级,A级

是的

错误

文稿:

文稿:

什么时候应该:

文稿:

CS112:4级,A级

ENGH101:3级,B级

MATH113:学分4,等级IP

1 个答案:

答案 0 :(得分:1)

你的问题是

def add_course(self,course):
    for i in self.courses:
        self.course = self.courses.append(course)

您正在迭代self.courses。当此列表为空时,for循环不会运行,因为没有任何内容可以迭代。这实际上也会导致无限循环(直到你遇到MemoryError),因为你要追加到迭代的同一个列表。

你会看到的另一个问题,就像@Nullman在评论中描述的那样list.append会返回None所以

self.courses = self.courses.append(course)

在第一次通话后,您的列表现在为None,第二次调用add_course时,它会提升

AttributeError: 'NoneType' object has no attribute 'append'

所以你的功能应该是

def add_course(self,course):
    self.courses.append(course)