2012-04-21 8 views
0

私はPython 3で演算子の多重定義を使用して私の最初のプログラムを作成していますが、を貼り付けて(+)演算子を追加しました。Python 3の__add__メソッド

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 

基本的に私はC = C1 + C2を入力することにより、2つのキューのオブジェクトを接続する、その後、(私は、1つが存在するが、すでにそこに知っている)キュークラスを作ってるんです。しかし、私が(c)を印刷すると、それは "、"と "。"を混乱させました。何が間違っているのか理解できません。 助けてください?

+0

あなたは 'tempList =キュー(self.myQueue)'またはそのような何かを行うべきではないでしょうか。私はPythonについてよく分かりませんが、 'self.myQueue'を' tempList'に割り当てると、 'tempList'は' self.myQueue'と同じオブジェクトを参照しているかもしれません... – dreamlax

+0

私は私の質問を編集しました。私は本当に同じオブジェクトに言及したので、[:]を追加しました。私はtempListをQueue型にするのではなくList型を返すようにしたいので、Queue(リスト)を返すことができます – Jjang

+0

なぜこのタグは[C++]ですか? – geoffspear

答えて

0

のコードでは、tempListself.myQueueに設定してから変更してください。 これが変更されます両方キュー。 myQueueをコピーし、参照を共有しません。

とtmplist = queueの両方の変数は、と同じオブジェクトを指しています。 多分これを理解するのに役立ちます:

>>> 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

1

を(おそらく、むしろこれを編集するよりも、SO上の別の質問でなければなりません)あなたの2番目の質問に答えるために:

if(x<len(self.myQueue)):は、Aの値かどうかをチェックしていますstringはリストの整数長より小さい。これは意味をなさないし、常にFalseになります。

としてあなたは全体の方法を書き換えることができます:

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