-2

我想将不同的课程附加到两个不同的教室中,但是它不断将相同的课程添加到两个教室中。这是我的 AddCourse 功能

已编辑

我根据您的建议修改了我的代码。

class Classroom:
    """I omitted part of the class for brevity"""
    def __init__(self, Seed = None, ClassroomId = None, FirstCourseStartTime = None, LastCourseEndTime = None, CourseList = [], ProfessorList = []):
        self.setFirstCourseStartTime(FirstCourseStartTime)
        self.setLastCourseEndTime(LastCourseEndTime)
        self.setCourseList(CourseList)
        self.setProfessorList(ProfessorList)
        self.setSeed(Seed)
        self.setClassroomId(ClassroomId)
    def addCourse(self, Course):
        self.CourseList.append(Course)
    def setCourseList(self, List):
        self.CourseList = List
#the statements below are from a different file to run the code/class above    
Classroom1 = Classroom(Seed = os.urandom(1024/8), FirstCourseStartTime = 8, LastCourseEndTime = 19.75)
Classroom2 = Classroom(Seed = os.urandom(1024/8), FirstCourseStartTime = 8, LastCourseEndTime = 19.75)
# Adding the courses to the classrooms
Classroom1.addCourse(Course0)
Classroom1.addCourse(Course1)
Classroom1.addCourse(Course2)
Classroom1.addCourse(Course3)
Classroom1.addCourse(Course4)
Classroom1.addCourse(Course5)
Classroom1.addCourse(Course6)
Classroom1.addCourse(Course7)
Classroom2.addCourse(Course8)
Classroom2.addCourse(Course9)
Classroom2.addCourse(Course10)
Classroom2.addCourse(Course11)
Classroom2.addCourse(Course12)
Classroom2.addCourse(Course13)
Classroom2.addCourse(Course14)
Classroom2.addCourse(Course15)
4

3 回答 3

3

如果你给出你的类定义,那真的很有帮助。

猜测一下,您已将 .CourseList 定义为类变量而不是对象变量。

另外,请查看PEP 8格式指南;方法应该.like_this,不是.LikeThis

class Classroom(object):
    courses = []     # class variable - all instances share the same list

    def __init__(self):
        self.courses = []    # object variable - each instance has its own

编辑:好的;现在让我们看看你对.setCourseList()...的定义

于 2012-07-14T01:08:51.560 回答
1

看起来你的问题是你的类的所有实例都在处理同一个列表,因为你只声明了一次。

这是您的问题的一个示例,没有所有无关紧要的额外内容:

class Classroom(object):

    def __init__(self, course_list=[]):
        self.course_list = course_list

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

当我们使用它时,我们会看到您描述的行为:

c1 = Classroom()
c2 = Classroom()

c1.add_course('ENG 101')
c2.add_course('MATH 101')

print c1.course_list
print c2.course_list

印刷:

['ENG 101', 'MATH 101']
['ENG 101', 'MATH 101']

为了证明这是同一个列表,我们可以打印id每个实例的列表:

print id(c1.course_list)
print id(c2.course_list)

对我来说,这会输出这个(尽管每次都可能不同):

4299912760
4299912760

您的问题行在course_list=[]__init__参数列表中。 您正在那里定义列表,然后可能不会将其复制到其他任何地方。这意味着每当您附加到列表时,它始终是您要附加到的同一个列表。重要的是要了解,在 python 中,方法def行(显然不是主体)只运行一次,而不是每次创建新实例(或运行函数,就此而言)。

这是一个更正的版本。而不是默认为[],您最应该始终默认为None然后将其设置为没有给出任何内容的列表。

class Classroom2(object):

    def __init__(self, course_list=None):
        self.course_list = course_list or []

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


c1 = Classroom2()
c2 = Classroom2()

c1.add_course('ENG 101')
c2.add_course('MATH 101')

print c1.course_list
print c2.course_list

现在按预期打印:

['ENG 101']
['MATH 101']
于 2012-07-14T01:52:00.113 回答
0

您在寻找extend方法吗?(而不是append

您可以将多个值添加到列表中,如下所示:

a = [1,2,3]
a.extend([4,5,6])
print a // [1,2,3,4,5,6]

(虽然我不确定我是否理解你想要做什么......)

于 2012-07-14T01:16:54.023 回答