2017-09-24 76 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) 

它與初始化函數,並激活一對夫婦的選擇非常簡單。在閱讀我的訓練數據後,我用下面的代碼初始化神經網絡。初始化outputNeuron數組時,特別是在運行時

Neuron.initInputNeurons(inputNeurons, value) 

我收到以下錯誤

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不存在發生

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) 

我的錯誤。當我將_input神經定義爲__init__作爲靜態變量時,也是如此。

我應該如何在python中定義和訪問類變量?

+0

注意的是Python術語「類方法」是從一個類一個普通的方法是不同的。 –

回答

3

對於Python,您需要爲每個引用明確引用self。這意味着它是您的第一個參數它需要通過點符號來引用。

試試這個:

# 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)