2012-09-28 43 views
3

我有事件,人們可以屬於事件。所以我有一個事件類,看起來像:試圖將項目追加到Python中的列表中,但其代理奇數

class Event(): 
    name = "" 
    people = [] 

我也有一個全局變量來保存所有事件

events = [] 

現在我想要處理我的原始數據轉化爲事件和人物去對他們說:

# If there are missions, add the events 
    for m in wiki.missions: 
     foundEvent = False 
     for e in events: 
      if e.name == m: 
       foundEvent = True 
       foundPerson = False 
       for p in e.people: 
        if p.rawName == person.rawName: 
         foundPerson = True 
       if not foundPerson: 
        e.people.append(person) 
        print "Added " + person.display + " to " + m + " (" + str(len(e.people)) + ")" 

     if foundEvent == False: 
      event = Event() 
      event.name = m 
      event.people.append(person) 
      print "New " + person.display + " to " + m + " (" + str(len(event.people)) + ")" 
      events.append(event) 
      event = None 

根據我的報表打印,我可以看到誰被添加到現有的事件以及何時和誰使一個新的事件。奇怪的是,事件中的人數總是增加人們在所有事件中的數量。

New Joseph M. Acaba to STS-119 (1) 
New Joseph M. Acaba to Soyuz TMA-04M (2) 
New Joseph M. Acaba to Expedition 31 Expedition 32 (3) 
Added Dominic A. Antonelli to STS-119 (4) 
New Dominic A. Antonelli to STS-132 (5) 
Added Richard R. Arnold to STS-119 (6) 

這對我來說沒有意義,它比我做錯了什麼? (我確定有很多)

+0

你的問題我不清楚..你能也顯示預期的輸出?你想做什麼? –

回答

3

你應該使用實例變量而不是類變量。因此,設置班級這樣的事情,並修改代碼的其餘部分,以適應它:

class Event: 
    def __init__(self, name): 
     self.name = name 
     self.people = [] 

這裏最重要的區別是,就像你描述:實例變量爲類的特定實例設置的,而類變量設置爲所有該類的實例。

+0

我不得不懷疑......我的任何班級如何工作: - /純運氣我想:) :) – Justin808

+1

@ Justin808當你指定例如'event.name = m'你創建一個新的實例變量來隱藏類變量。 'event.people.append()'是一種不同的情況:它改變了類變量。 –

1

您正在創建類變量而不是實例變量,因此您不斷將人員追加到類中,而不是每個新創建的對象。

試試這個:

class Event(): 
    def __init__(self, name): 
     self.name = "" 
     self.people = [] 

後來

event = Event(m) 
event.people.append(person) 
相關問題