Python:如何总结CLASS中列表中的所有元素

时间:2017-01-14 07:45:19

标签: python subclass

class Neuron:
    def __init__(self, inbound_neurons=[], label=''):
        self.label = label
        self.inbound_neurons = inbound_neurons
        self.outbound_neurons = []
        self.value = None

        for n in self.inbound_neurons:
            n.outbound_neurons.append(self)

    def forward(self):
        raise NotImplemented

class Input(Neuron):
    def __init__(self):
        Neuron.__init__(self)

    def forward(self, value=None):
        if value is not None:
            self.value = value

class Add(Neuron):
    def __init__(self, *inputs):
        Neuron.__init__(self, inputs)

    def forward(self):
        for n in self.inputs:
            self.value = self.value + n

Add()是类Neuron的子类,我在使用循环添加输入数组的所有元素时遇到了一些困难。

3 个答案:

答案 0 :(得分:2)

class Add(Neuron):

    def __init__(self, *inputs):
        Neuron.__init__(self, inputs)

    def forward(self):
        self.value = 0
        for n in self.inbound_neurons:
            self.value = self.value + n.value

        return(self.value)

功能'转发'在Class Add中有一个循环来汇总inbound_neurons的所有元素。

答案 1 :(得分:1)

这段代码应该是:

for n in self.inbound_neurons:
        self.outbound_neurons.append(self)

self.inputs从未在您的班级中定义过。为了遍历输入,您必须:

    def __init__(self, *inputs):
        self.inputs = inputs
        Neuron.__init__(self, inputs)

但是,输入看起来像是一个包含两个项目的列表,另一个列表,也可能是一个字符串。这些不会结合在一起。看起来您想要总计self.inbound_neurons

答案 2 :(得分:1)

它与您的问题无关,但非常重要:您不应将可变数据类型(作为列表)用于函数/方法默认值。

您的代码应该像这样更新:

class Neuron:
    def __init__(self, inbound_neurons=None, label=''):
        self.inbound_neurons = inbound_neurons or []
        # ...

为什么你应该这样做,这里解释:"Least Astonishment" and the Mutable Default Argument