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