Python:调用方法的问题

时间:2012-10-18 22:13:44

标签: 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'未定义“错误。有人能够解释为什么这不起作用吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

所以你的例子看起来像:

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

答案 1 :(得分:1)

在课堂内,{p> findNumber(k)应该以{{1​​}}的形式进行访问。

self.findNumber(k)

因为在类下声明的Phonebook.findNumber(self,k)variable成为类function

答案 2 :(得分:1)

您需要将self添加到findNumber()

所以它会变成:

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

否则它不知道findNumber来自何处,因为它只在您的班级中定义,或者是自我。