2012-07-14 45 views
-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) 
+0

如何創建你的 「課程」 的實例?另外,TitleCase通常保留給類名稱。所以這可能很難看出什麼是一個實例或一個方法調用與一個類 – jdi 2012-07-14 01:13:39

+1

有一個編程規則,說如果你發現自己重複同一個指令3次或更多次,你應該使用循環代替。 – 2012-07-14 01:49:18

+1

您爲「簡潔」省略了部分錯誤,但包含了對同一方法的16個調用以彌補簡潔性? -1。 – geoffspear 2012-07-14 02:06:56

回答

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

爲了表明這是相同的列表,我們可以打印每個i的id nstance的名單:

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

對於我來說,這個輸出這個(雖然它可能每次都不同):

4299912760 
4299912760 

的問題行了,你是在__init__的PARAM名單course_list=[]您正在定義列表,然後可能不會將其複製到其他任何地方。這意味着無論你追加到列表中,它總是與你追加的列表相同。理解這一點非常重要,在python中,方法def行(顯然不是body)只能運行一次,並不是每次創建新實例(或者運行該函數)。

這是一個更正的版本。而不是默認爲[],你應該總是默認爲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'] 
+0

非常感謝您的支持幫助,這解決了我的問題。 – Binday 2012-07-14 02:09:36

+1

不客氣,很高興我能提供幫助。 – 2012-07-14 02:13:51

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() ...

+1

我想你的建議是將它添加爲類屬性,可能是對的。另外你應該提到對象實例/屬性應該也可以是小寫 – jdi 2012-07-14 01:15:14

+0

我沒有任何類變量。 – Binday 2012-07-14 01:29:36

0

您是否在尋找extend方法? (中append代替)

您可以添加多個值,像這樣的列表:

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

(Altough我不知道我已經明白你想要做什麼......)

+0

它可能是什麼休建議,關於班級屬性vs實例屬性 – jdi 2012-07-14 01:17:24

+0

我不是在尋找擴展方法,但是我試圖增加前七課程到教室1和課程8到15到教室2. – Binday 2012-07-14 01:34:31