2012-02-12 21 views
3

こんにちは、私はこのコードコンストラクタクラスの内部関数を呼び出す方法は?

class Test(object): 
    def start_conn(self): 
     pass 

    def __init__(self): 
     self.conn = start_conn() 

しかし、このコードは、このエラーを作る持っている:

NameError: global name 'start_conn' is not defined

私はプログラムがエラーなしで動作self.conn = self.start_conn()を記述する場合、私の質問は、で呼び出すための必須ですが私は新しいインスタンスを作成しているときにクラスのメソッドをself?私の側からのエラーですか?

ありがとうございます

+0

はい、Pythonで明示的にselfを指定する必要があります。あなたの2つの方法の周りに "クラス"はありますか? – Gregor

答えて

4

要するに、それは必須です。メソッドが格納されているコンテナを参照する必要があります。ほとんどの場合、それはselfを指すことを意味します。

この方法は次のとおりです。あなたは

class FooClass(object): 
    def my_method(self, arg): 
     print self.my_method, arg 

を(新しいスタイル)クラスを定義するときは、その結合していない状態でメソッドを含むtypeオブジェクトを作成します。クラスの名前(つまり、FooClass.my_methodを介して)を使用して、バインドされていないメソッドを参照できます。このメソッドを使用するには、selfパラメータ(FooClass.my_method(fooclass_instance, arg)など)を使用してFooClassオブジェクトを明示的に渡す必要があります。

次に、クラス(f = FooClass())をインスタンス化すると、FooClassのメソッドは特定のインスタンスfにバインドされます。各方法のselfは、そのインスタンス(f)を参照します。これは自動的なので、メソッドに明示的にfを渡す必要はありません。しかし、あなたはまだできますFooClass.my_method(f, arg);これはf.my_method(arg)に相当します。

注意は、しかし、それは両方例では、selfは他の道を介してそれらにアクセスすることはできませんクラスの他の方法はmy_methodに渡され、それを通して容器です。

関連する問題