Python类函数无法找到类变量

时间:2017-09-24 17:34:27

标签: python

我是python的新手,但对OO语言非常熟悉,而且我正在努力解决一个明确的编译错误,但我不明白如何修复。

这是我的班级

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函数和几个激活选项相当简单。在读取我的训练数据后,我使用以下代码初始化神经网络。

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)

初始化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 不存在。当我将 __ init __ 函数之外的 _inputNeurons 定义为静态变量时也是这种情况。

我应该如何在python中定义和访问类变量?

1 个答案:

答案 0 :(得分:3)

使用Python,您需要为每个引用显式引用self。这意味着它是您的第一个参数 AND ,需要通过点表示法引用它。

试试这个:

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