web-dev-qa-db-ja.com

Python:NameError:グローバル名「foobar」が定義されていません

次のクラスを作成しました。

_class myClass(object):
    def __init__(self):
        pass

    def foo(self, arg1, arg2):
        pp = foobar(self, arg1, arg2)
        if pp:
            return 42
        else
            return -666


    def foobar(self, arg1, arg2):
        if arg1 == arg2:
            return 42
        else:
            return None
_

論理は無意味です-無視してください。私がそうしようとしているのは、別のインスタンスメソッドからインスタンスメソッドを呼び出すことです-NameErrorを取得しています。私はもともと、これが定義される前にfoo()foobar()を呼び出すためだと思っていましたが、スクリプト内の関数定義の順序を変更しても違いはありませんでした。

このエラーの原因は何ですか、それを修正する方法はありますか?

29
skyeagle

Pythonはコードをローカルクラスに自動的にスコープしません。あなたはそれを伝える必要があります。

pp = self.foobar(arg1, arg2)

http://docs.python.org/tutorial/classes.html

52
Glenn Maynard