0

そのため、与えられた数値入力のみを使用して (pybrain を使用して) ネットワークを作成するクラスを Python で作成しています {Pybrain の API に慣れるためのちょっとしたプロセス}。

私の問題は、スコープがクラスでどのように機能するかについてかなり慣れていないことです。基本的にプログラムを適切にセットアップしているにもかかわらず、キーエラーが返され続けます。

操作が必要なすべての変数はinit関数で作成されます。私がクラスのために取り組んでいるメソッドは、Python の vars()[] メソッドを使用してinit関数で宣言された変数の 1 つを呼び出そうとしています。(コードの一部を実際に見ることができます...ラフ ドラフト: タプルの二項演算子を辞書項目に一致させる

とにかく、方法は次のとおりです。

    def constructnetwork(self):
    """constructs network using gathered data in __init__"""
       if self.recurrent:
            self.network = pybrain.RecurrentNetwork  
            #add modules/connections here
       elif self.forward:
            self.network = pybrain.FeedForwardNetwork
       else:
            self.network = pybrain.network

       print vars()[self.CONNECT+str(1)]
       print vars()[self.CONNECT+str(2)]
       print self.network

(スペースの悪さを許してください。うまくコピー アンド ペーストできませんでした。) KeyError を発生させている部分は、変数の値を取得する必要がある "print vars()[self.CONNECT+str(1)]" です。 Connection1" (self.CONNECT = 'Connection') ですが、keyerror を呼び出します。

転送する変数を取得するにはどうすればよいですか? 質問するのに役立つ情報がさらに必要な場合は、質問をできるだけ短くするようにしています.

4

1 に答える 1

2

vars()ローカル変数の辞書への参照を返します。vars()(リンク先の投稿のコードが示唆するように)で使用した場合__init__、そのメソッドでローカル変数を作成しただけで、そのメソッドの外部からはアクセスできません。

あなたは何をしていると思いますかvars()、そしてあなたは何をしようとしていますか? あなたが欲しいのはgetattrand setattr、または単なる辞書であり、 ではないという予感がありますvars

編集:あなたのコメントに基づいて、それは確かに、あなたが使用すべきではないように聞こえますvars. __init__で、次のようなことをしたほうがよいでしょう。

 self.connections = {}
 self.connections[1] = "This is connection 1"

次に、メソッドで次のようにします。

 self.connections[1]

ただし、これはコードに基づく漠然とした推測にすぎません。この「つながり」に何を意図しているのか、私にはよくわかりません。オブジェクトに関連付けられたデータにしたいですか?

于 2012-07-24T04:26:23.673 に答える