我是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中定义和访问类变量?
答案 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)