2013-02-10 11 views
31

が定義されていない私は、Pythonスクリプトを持っていると私は、次のエラーが発生します:ここでPythonのNameError:名前は

Traceback (most recent call last): 
    File "C:\Users\Tim\Desktop\pop-erp\test.py", line 1, in <module> 
    s = Something() 
    NameError: name 'Something' is not defined 

は、問題の原因コードです:

s = Something() 
s.out() 

class Something: 
    def out(): 
     print("it works") 

これがされて実行されますWindows 7 x86-64ではPython 3.3.0を使用しています。

Somethingクラスが見つからないのはなぜですか?

+4

この問題を解決するには、クラスと関数を定義した後で呼び出します。 Pythonにはクラスやメソッドを宣言するための方法はありません。唯一のオプションは、関数の呼び出しを、プログラムの最後ではなく、プログラムの最後に置くことです。もう1つの方法は、ファイルの先頭にあるインポートされたライブラリにメソッドを配置し、常に最初に呼び出されるようにすることです。 –

答えて

52

あなたはそれを使用する前に、クラスを定義します。

class Something: 
    def out(self): 
     print("it works") 

s = Something() 
s.out() 

あなたはすべてのインスタンスメソッドの最初の引数としてselfを渡す必要があります。

+0

優秀、ありがとう!私は自己を含めるつもりだったが、すぐにこの短い例を書いたときに忘れてしまった。 – user1899679

+0

よくない*すべての*メソッド。面白いことを保つためには常に '@ staticmethod'と' @classmethod'があります:-P – mgilson

+0

@mgilson 'self' *は' @classmethod'でも使えるでしょう。 'cls'と呼ばれる)。 – delnan

2

クラスのインスタンスを作成する前に、クラスを定義する必要があります。 Somethingの呼び出しをスクリプトの最後に移動します。

あなたは馬の前に荷車を入れて、それらが定義される前にプロシージャを起動しようとすることができますが、それは醜いハックになり、ここで定義されるように、あなた自身をロールバックする必要があります。

Make function definition in a python file order independent

関連する問題