1

我是 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”未定义“错误。有人能解释为什么这不起作用吗?

提前致谢。

4

3 回答 3

3

这不起作用,因为findNumber它不是全局定义的函数。它是您对象上的一个方法,因此要调用它,您需要调用self.findNumber(k).

所以你的例子看起来像:

 def nameList(self):
        list = self.book.keys()
        list.sort()
        for k in list:
            print k, self.findNumber(k)
于 2012-10-18T22:16:04.177 回答
1

findNumber(k)应该self.findNumber(k)在课堂内访问。

或作为Phonebook.findNumber(self,k).

因为在一个类下声明的variableorfunction变成了一个类的attribute.

于 2012-10-18T22:16:19.223 回答
1

你需要添加selffindNumber()

所以它会变成:

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

否则它不知道findNumber来自哪里,因为它只在你的类中定义,或者,自我。

于 2012-10-18T22:16:39.017 回答