2012-10-18 24 views
1

我是Python的新手,我寫了一個用於管理簡單電話簿的類。 (我刪除了與這篇文章不相關的方法)。Python:調用方法的問題

class Phonebook: 

    def __init__(self): 
     self.book = {} 

    def newEntry(self, name, number): 
     self.book[name] = number 

    def findNumber(self, name): 
     return self.book[name] 

    def nameList(self): 
     list = self.book.keys() 
     list.sort() 
     for k in list: 
      print k, self.book[k] 

我的問題是關於過去的方法,nameList,其以字母順序打印電話簿條目(姓名和電話號碼)。本來,我試過如下:

def nameList(self): 
     list = self.book.keys() 
     list.sort() 
     for k in list: 
      print k, findNumber(k) 

然而,這投擲了一個「NameError」全局名稱「findNumber」沒有定義」的錯誤會有人能夠解釋爲什麼沒有工作

在此先感謝。

+2

使用self.findNumber(k)。 –

+0

請不要將您的變量命名爲list,它已經是內置列表類型的名稱。 –

回答

3

這不起作用,因爲findNumber不是全局定義的功能。這是你的對象的方法,所以調用它,你就需要調用self.findNumber(k)

所以,你的例子會看起來像:

def nameList(self): 
     list = self.book.keys() 
     list.sort() 
     for k in list: 
      print k, self.findNumber(k) 
+0

工作。謝謝你的解釋。 – Robincognito

+0

沒問題!如果這確實解決了你的問題,你能[標記我的答案接受](http://stackoverflow.com/faq#link-howtoask)?謝謝! –

+0

完成。 :)幾分鐘後,它不會讓我接受你的答案。 – Robincognito

1

findNumber(k)應該作爲self.findNumber(k)在裏面的類時訪問。

Phonebook.findNumber(self,k)

因爲variablefunction在一個類下聲明成爲一個類的attribute

1

你需要添加selffindNumber()

所以它會變成:

def nameList(self): 
     list = self.book.keys() 
     list.sort() 
     for k in list: 
      print k, self.findNumber(k) 

否則它不知道在哪裏findNumber從,因爲它是在你的類只定義,或者,未來自我。