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

selfに追加する必要がありますfindNumber()

したがって、次のようになります。

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 に答える