2012-11-06 152 views
0

爲什麼PyDev給我這個錯誤:當我嘗試爲反演計數算法實現一個簡單的類時,「Class variable undefined」?這是我的代碼:課堂作業問題

from collections import deque 

Class inversionCount: 

    def __init__(self, n): 
     self.n = n 
    def inversionMergeSort(m, n): 
     print m 
     if len(m) <= 1: 
      n = 0 
      return (m, n) 
     half = len(m)/2 
     left = m[0:half] 
     right = m[half:] 
     left = mergeSort(left) 
     right = mergeSort(right) 
     return inversionSort(left, right) 

    def inversionSort(left, right, n): 
     leftQueue = deque(i for i in left) 
     rightQueue = deque(j for j in right) 
     orderedList = [] 
     while len(leftQueue) > 0 or len(rightQueue) > 0: 
      if len(leftQueue) > 0 and len(rightQueue) > 0: 
       if leftQueue[0] < rightQueue[0]: 
        orderedList.append(leftQueue[0]) 
        leftQueue.popleft() 
       else: 
        orderedList.append(rightQueue[0]) 
        if len(leftQueue) > 1: 
         self.n += len(leftQueue) 
        rightQueue.popleft() 
      elif len(leftQueue) > 0: 
       orderedList.append(leftQueue[0]) 
       leftQueue.popleft() 
      elif len(rightQueue) > 0: 
       orderedList.append(rightQueue[0]) 
       rightQueue.popleft() 
     return (orderedList, n) 

但PyDev未能認識到inversionCount確實是一個類。有什麼想法嗎?

+1

另外,如果方法名稱空間中的inversionMergeSort()方法實際上是一個實例方法,則您在末尾調用'inversionsSort()'。你需要用'self'來稱呼它。我也不太清楚爲什麼你的'__init __()'中有'self.n',即使你永遠不會訪問它,並且把'n'作爲所需的參數傳遞給兩個方法。 –

+1

@ sr2222:讓我們假設OP從來沒有達到那些點,因爲他被困在奇怪的'Class variable undefined'錯誤。 :-) –

+0

@MartijnPieters足夠公平,看起來像是有一個設計問題出現在這裏,可能與「Python不是Java」有關的誤解。 –

回答

9

class是小寫:

class inversionCount: 

因爲變量Class確實沒有定義該錯誤被拋出; python區分大小寫,Classclass不一樣;前者被視爲變量名稱,而class是關鍵字。

如果要用解釋器運行代碼,它會引發語法錯誤; PyDev的解釋略有不同。