web-dev-qa-db-fra.com

Python: NameError: le nom global 'foobar' n'est pas défini

J'ai écrit le cours suivant:

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

La logique est absurde - ignorez-la. Ce que j'essaie donc d'appeler une méthode d'instance à partir d'une autre méthode d'instance - et j'obtiens un NameError. À l'origine, je pensais que cela était dû à foo() appelant foobar() avant qu'il ne soit défini - mais changer l'ordre des définitions de fonction dans le script ne faisait aucune différence.

Quelqu'un est-il à l'origine de cette erreur et comment y remédier?

29
skyeagle

Python n'étend pas automatiquement le code à la classe locale; vous devez le lui dire.

pp = self.foobar(arg1, arg2)

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

52
Glenn Maynard