2017-09-24 11 views
0

私はPythonの初心者ですが、OO言語にはかなり精通していますが、わかりやすいコンパイルエラーに苦しんでいますが、修正方法はわかりません。Pythonクラスの関数がクラス変数を見つけることができません

はここに私のクラス

class Neuron(): 
    def __init__(self): 
     self.__output = 0 
     self.__inputNeurons = [] 

    def initInputNeurons(neuronArray, initialWeight=0): 
     for neuron in neuronArray: 
      __inputNeurons.append((neuron, initialWeight)) 

    def activateFromInput(value): 
     output = value; 

    def activateFromNeurons(activationFunction, threshold=1): 
     sumWeightedInputs = 0 
     for connection in __inputNeurons: 
      sumWeightedInputs += connection[0].output * connection[1] 
     output = activationFunction(sumWeightedInputs, threshold) 

そのinit関数および活性化のためのカップルのオプションを持つ非常に簡単です。トレーニングデータを読み込んだ後、次のコードでニューラルネットワークを初期化します。具体的には、outputNeuron配列を初期化するとき

Neuron.initInputNeurons(inputNeurons, value) 

が、私はエラーが__inputNeuronsが存在しないことを私に語っている

Traceback (most recent call last): 
    File "./simpleNet.py", line 88, in <module> 
Neuron.initInputNeurons(inputNeurons, value) 
    File "./simpleNet.py", line 62, in initInputNeurons 
__inputNeurons.append((neuron, initialWeight)) 
NameError: name '_Neuron__inputNeurons' is not defined 

次のエラーを取得する実行しているとき

inputNeurons = [] 
for value in trainingCharacterVecs[0]: 
    inputNeurons.append(Neuron()) 

outputNeurons = [] 
for value in range(7): 
    print(value); 
    neuron = Neuron() 
    Neuron.initInputNeurons(inputNeurons, value) 
    outputNeurons.append(neuron) 

私のエラーが発生します。これは、_inputNeurons__init__の外の静的変数として定義した場合にも当てはまります。

Pythonでクラス変数を定義しアクセスするにはどうすればよいですか?

+0

注:

はこれを試してみてください。 –

答えて

3

Pythonでは、参照ごとにselfを明示的に参照する必要があります。つまり、最初のパラメータであることを意味します。およびドット表記で参照する必要があります。 Pythonで用語「クラスメソッド」は、クラスの通常のメソッドとは区別されること

# self is the first parameter 
def initInputNeurons(self, neuronArray, initialWeight=0): 
    for neuron in neuronArray: 
     # direct reference to self 
     self.__inputNeurons.append((neuron, initialWeight)) 

# ... LATER ... 
def activateFromNeurons(self, activationFunction, threshold=1): 
    sumWeightedInputs = 0 
    # Note the reference to `self.` 
    for connection in self.__inputNeurons: 
     sumWeightedInputs += connection[0].output * connection[1] 
    output = activationFunction(sumWeightedInputs, threshold) 

# and at the bottom: 

    neuron = Neuron() 
    # marking this lower case, to match your variable name. 
    # otherwise `self` doesn't get passed. 
    neuron.initInputNeurons(inputNeurons, value) 
    outputNeurons.append(neuron) 
関連する問題