__在Python3中添加_u方法

__在Python3中添加_u方法,python,python-3.x,queue,Python,Python 3.x,Queue,因此,我在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__(s

因此,我在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
def\uuuu添加(self,newMember):
如果(isinstance(新成员,队列)):
templast=self.myQueue[:]#复制
templast.extend(newMember.myQueue)
返回队列(模板列表)
定义(自我):
如果不是self.myQueue:
string=“”
其他:
string=“”
对于self.myQueue中的x:
string=string+str(x)

如果在代码中设置了(x,则将
templast
设置为
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]

要回答第二个问题(这可能是一个单独的问题,而不是编辑此问题):


if(xShouldn)你不做
templast=Queue(self.myQueue)
或者类似的东西?我对Python不太了解,但是如果你只是将
self.myQueue
分配给
templast
,那么可能
templast
引用了与
self.myQueue
相同的对象……我编辑了我的问题。我确实引用了相同的对象,所以我添加了[:]。我不希望tempList是队列类型,而是列表类型,这样我就可以返回队列(列表)谢谢!现在c1真的没有改变。但我仍然无法完美打印,它会不断弄乱“,”和“.”。我编辑了问题,添加了我的str代码
def __str__(self):
    return ', '.join(str(x) for x in self.myQueue) + '.'