2016-12-17 33 views
0

我不知道爲什麼這段代碼說每個Car有兩個乘客。我只在一輛車上增加一個Person。然而程序的輸出是這樣的。從簡單的Python類實現意外的輸出

People in car A 
Alice 
Bill 
People in car B 
Alice 
Bill 

其實我只希望愛麗絲在汽車A和比爾是在汽車B.

class Car(): 

    name = None 
    person_list = [] 

    def __init__(self, name): 
     self.name = name 

    def add_person(self, person): 
     self.person_list.append(person) 

    def list_people_in_car(self): 
     print "People in car {}".format(self.name) 
     for p in self.person_list: 
      print p.name 

class Person(): 

    name = None 

    def __init__(self, name): 
     self.name = name 

if __name__ == '__main__': 

    person_alice = Person('Alice') 
    person_bill = Person('Bill') 

    car_a = Car('A') 
    car_a.add_person(person_alice) 

    car_b = Car('B') 
    car_b.add_person(person_bill) 

    car_a.list_people_in_car() 
    car_b.list_people_in_car() 
+3

這樣做'person_list = []'你創建'Car'類的所有實例單列表。將列表的創建移動到'__init __()'中。 –

+0

啊,這同樣適用於'name'。或者是因爲我在'init'之外實例化它# –

+0

不,'name'很好。在__init __()中設置它的值會影響類中的聲明。 –

回答

4

這是因爲person_list是一個類變量。

將其更改爲實例級別,它會解決這個問題,即

class Car(): 

    def __init__(self, name): 
     self.name = name 
     self.person_list = []