2012-04-21 26 views
0

所以我在Python 3與運營商超載使我的第一個程序,我stucked在添加(+)運算符。__add__方法在Python 3

def __add__(self, newMember): 
    if(isinstance(newMember, Queue)): 
     tempList=self.myQueue[:] # makes a copy 
     tempList.extend(newMember.myQueue) 
     return Queue(tempList) 

def __str__(self): 
    if not self.myQueue: 
     string="." 
    else: 
     string="" 
     for x in self.myQueue: 
      string=string+str(x) 
      if(x<len(self.myQueue)): 
       string=string+", " 
      else: 
       string=string+"." 
    return string 

基本上我正在做Queue類(I已經知道有這樣一個存在),然後通過鍵入C = C1 + C2連接兩個隊列對象。但是當我打印(c)時,它弄亂了「,」和「。」。不能得到什麼錯誤。 有什麼幫助嗎?

+0

你不應該做'tempList =隊列(self.myQueue)'或類似的東西?我不太瞭解Python,但是如果你只是將'self.myQueue'賦值給'tempList',那麼'tempList'指的是與'self.myQueue'相同的對象... – dreamlax 2012-04-21 13:52:14

+0

我編輯了我的問題。我真的對同一個對象有所反應,所以我添加了[:]。我不希望tempList是一個隊列類型,但一個列表類型,所以我可以返回隊列(列表) – Jjang 2012-04-21 14:04:01

+0

爲什麼這標記爲[C++]? – geoffspear 2012-04-21 14:07:27

回答

0

在您的代碼中,您將tempList設置爲self.myQueue,然後對其進行修改。 這個變化都是隊列。你想複製myQueue,不能共享參考。

與tmplist =隊列,兩個變量指向相同對象。 也許這將有助於瞭解:

>>> queue = [] 
>>> tmplist = queue 
>>> tmplist.append(1) 
>>> tmplist 
[1] 
>>> queue 
[1] 
>>> tmplist = queue[:] #make a copy 
>>> tmplist.append(1) 
>>> tmplist 
[1, 1] 
>>> queue 
[1] 
+0

謝謝!現在c1真的不會改變。但是我仍然無法完美打印,它一直在搞亂「,」和「。」。我編輯了添加我的__str__代碼的問題 – Jjang 2012-04-21 13:59:48

1

要回答你的第二個問題(這大概應該是一個單獨的問題上SO,而不是編輯此一):

if(x<len(self.myQueue)):是檢查是否a的值字符串小於列表的整數長度。這沒有任何意義,並將永遠是假的。

你可以重寫的整個方法:

def __str__(self): 
    return ', '.join(str(x) for x in self.myQueue) + '.'