0

所以我在 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 类(我知道已经存在这样的一个),然后通过键入 c=c1+c2 连接两个 Queue 对象。但是当我打印(c)时,它弄乱了“,”和“。”。无法理解有什么问题。有什么帮助吗?

4

2 回答 2

1

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

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

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

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