-2

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をオブジェクト変数ではなくクラス変数として定義しました。

また、PEP8のフォーマットガイドラインも確認してください。メソッドは.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

宣言しているのは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 に答える