0

だから私はPython3で演算子をオーバーロードして最初のプログラムを作成していて、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

基本的に、私はQueueクラスを作成し(すでにそのようなクラスが存在することを知っています)、c = c1+c2と入力して2つのQueueオブジェクトを接続します。しかし、(c)を印刷すると、「、」と「。」が台無しになりました。何が悪いのかわからない。何か助けはありますか?

4

2 に答える 2

1

2番目の質問に答えるには(これは、おそらくこれを編集するのではなく、SOに関する別の質問であるはずです):

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

メソッド全体を次のように書き直すことができます。

def __str__(self):
    return ', '.join(str(x) for x in self.myQueue) + '.'
于 2012-04-21T14:13:54.947 に答える
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]
于 2012-04-21T13:51:21.083 に答える