2016-12-17 13 views
0

私はこのコードがそれぞれCarに2人の乗客を持っていると言っている理由を知らない。私はただ1台の車にPersonを1つ追加しています。しかし、プログラムの出力はこれです。予期せぬ出力が簡単なpythonクラスの実装

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

私は実際にperson_listがクラス変数であるので、それは車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

問題を修正します。リストの作成を '__init __()'に移動します。 –

+0

ああ、 'name'にも同じことが言えます。または、私は 'init'の外でそれをインスタンス化しているからです。 –

+0

いいえ、' name'は問題ありません。 '__init __()'にその値を設定すると、クラスの宣言がシャドーされます。 –

答えて

4

する車Aとビルにあることが唯一のアリスを期待しています。

インスタンスレベルに変更し、それを、それがperson_list = [] ``あなたはCar`クラスのすべてのインスタンスのための単一のリストを作成 `これにより、すなわち

class Car(): 

    def __init__(self, name): 
     self.name = name 
     self.person_list = [] 
関連する問題