Python 3中的__add__方法

时间:2012-04-21 13:34:22

标签: python python-3.x queue

所以我在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

基本上我正在创建一个Queue类(我知道已存在这样的类),然后通过键入c = c1 + c2连接两个Queue对象。但是当我打印(c)时,它搞砸了“,”和“。”。无法弄清楚什么是错的。 有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

回答你的第二个问题(这应该是关于SO的单独问题,而不是编辑这个问题):

if(x<len(self.myQueue)):正在检查字符串的值是否小于列表的整数长度。这没有任何意义,而且永远都是假的。

您可以将整个方法重写为:

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

答案 1 :(得分:0)

在您的代码中,您将tempList设置为self.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]