所以我在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)时,它搞砸了“,”和“。”。无法弄清楚什么是错的。 有什么帮助吗?
答案 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]