2015-10-27 56 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和與它內部的工作。