繁体   English   中英

Python 3中的__add__方法

[英]__add__ method in Python 3

因此,我在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)时,它弄乱了“,”和“。”。 无法解决问题。 有什么帮助吗?

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

if(x<len(self.myQueue)):正在检查字符串的值是否小于列表的整数长度。 这没有任何意义,并且始终为False。

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

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

在代码中,将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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM