我是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'未定义“错误。有人能够解释为什么这不起作用吗?
提前致谢。
答案 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)
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
来自何处,因为它只在您的班级中定义,或者是自我。