python int对象不可调用?

时间:2015-10-27 23:18:09

标签: python list

Python相对较新。 我试图练习链接列表,但我遇到了错误并且无法弄清问题是什么。

错误:

    self.assertEqual(l.size(), 1)
    TypeError: 'int' object is not callable

代码:

from node import Node

class List:
    def __init__(self):
        self.head = None
        self.size = 0

    def add(self, item):
        temp = Node(item)
        temp.setNext(self.head)    # ERROR ON THIS LINE
        self.head = temp
        size += 1

    def size(self):
        return self.size

    ...

节点:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

    ....

测试:

import unittest
import unorderedlist

class TestUnorderedList(unittest.TestCase):
    def test_add(self):
        l = unorderedlist.List()
        l.add(8)
        self.assertEqual(l.size(), 1)

if __name__ == '__main__':
    unittest.main()

这很有趣,因为如果我将size()重命名为len并将其称为l.len(),则它可以正常工作。任何人都有线索?

2 个答案:

答案 0 :(得分:3)

使用行self.size = 0隐藏方法size,因此size是一个int而不是方法。

答案 1 :(得分:0)

您已使用该属性隐藏了方法。 在您的代码中,您将访问类型为int的属性,因此无法调用。 避免命名方法和属性相同。

如果您想要实现属性。有@property装饰器:

@property
def size(self):
    return self._size

在构造函数中,您只需定义self._size并在其内部使用它。