双链表的大小

时间:2014-03-01 02:53:49

标签: python size doubly-linked-list

我创建了各种函数,其中一个函数应该附加数据,并且在附加项目后应该更新size函数。但是当我这样做时,我得到一个错误,说明+:'method'和'int'的操作数类型不受支持。我对这意味着什么感到困惑。

def size(self):
    self.length = 0
    return self.length 

def append(self, data):
    new_node = Double_Node(data)
    self.size = self.size + 1

2 个答案:

答案 0 :(得分:1)

def size(self):
    …

这定义了类的成员size,它是一种方法。因此,当您尝试执行self.size + 1时,您尝试将1添加到方法中,这正是错误告诉您的。

此外,您还要将结果分配给self.size,基本上会覆盖该方法,因此这不是您想要做的。

相反,您可能希望将self.length增加一个。

请注意,建议实现特殊方法__len__,以允许人们将len()函数与对象一起使用,这是获取对象长度的标准方法。例如:

def __len__ (self):
    return self.length

答案 1 :(得分:0)

在您的示例中,size是一个方法,而不是整数。你可能想要调用它,但由于它不是属性,你需要使用属性装饰器及其setter:

class MyObj(object):
    def __init__(self):
        self.length = 0
    @property
    def size(self):
        return self.length 

    @size.setter
    def size(self, value):
        self.length = value

    def append(self, data):
        self.size = self.size + 1

然后:

>>> myobj = MyObj()
>>> myobj.length
0
>>> myobj.size
0
>>> myobj.append('foo')
>>> myobj.size
1