2015-10-27 54 views
0

相对较新Python。 我试图练习链表,但我坚持错误,并找不出问题所在。python int对象不可调用?

错误:

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(),它可以正常工作。任何人都有线索?

+0

我建议'self._size'为数据;这样你就不会跺脚了。 –

+0

'self.size'是一种方法还是数据? –

+0

@PeterWood,......好吧,那就是问题;在这里的代码中,它们在不同的时间。 –

回答

3

随着行self.size = 0你隐藏的方法size,所以size是一个int,而不是一个方法了。

+0

我通常看到术语“阴影”而不是“隐藏”。 –

0

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

如果你想实现属性。还有就是@property装饰:

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

在你的构造函数,你只需定义self._size和与它内部的工作。