我正在处理的程序使用嵌套类。顶级类名为Brain
,它有两个内部类Neuron
和Axon
。内部类需要能够修改顶级类的实例变量。
Brain
记录已实例化的神经元和轴突数量。 Neuron
保存有关其行动潜力及其产出的信息。 Axon
确定如何将能量从一个神经元穿越到另一个神经元。这样,每当我实例化神经元时,它都会保存在大脑的实例中。轴突也是如此。
到目前为止,这是我的代码:
class Brain(object):
def __init__(self):
self.neurons = []
self.axons = []
class Neuron(object):
def __init__(self, pos, AP_Energy, AP_threshold):
# General attributes
self.outputs = {}
self.Energy = 0
self.x, self.y = pos[0], pos[1]
# Action Potential attributes
self.AP_Energy = AP_Energy
self.AP_threshold = AP_threshold
"""Append self to instance
of Brain in neurons"""
def add(self, value): self.Energy += value
def link(self, neuron, weight): self.outputs[neuron] = weight
def act(self):
for neuron in self.outputs.keys():
"""Append Axon(self, neuron) to
instance of Brain in axons"""
class Axon(object):
def __init__(self, n1, n2):
# Neurons
self.n1, self.n2 = n1, n2
# Action Potential attributes
self.wavelength = sqrt((5*n1.AP_Energy)/3)
self.distance = sqrt((n2.x-n1.x)**2+(n2.y-n1.y)**2)
def action_potential(self): # Bunch of math stuff
这个想法是你可以创建神经元,而不必将大脑实例作为其参数之一。因此,如果我想创建一个带有两个神经元的Brain
实例,它应该如此显示:
EntityA = Brain()
EntityA.Neuron((0, 1), 15, 24)
EntityA.Neuron((4, 2), 30, 41)
如果我需要从add()
中的第一个神经元调用EntityA
,我应该可以将其称为EntityA.neurons[0].add(value)
,因为在我创建神经元时它应该自动追加自身列表。
我将如何做到这一点,如果不可能做出类似的结果呢?
编辑:使用函数实例化类Neuron
并将其保存到Brain
实例中的列表中似乎是明显的答案。 问题出现在实例化Neuron.act()
的函数Axon
中,并且必须将其保存到{{>相同实例{{{ 1}}用于神经元。之前的限制仍然适用。
答案 0 :(得分:0)
class Brain(object):
def __init__(self):
self.neurons = []
self.axons = []
class Neuron(object):
...
class Axon(object):
...
def add_neuron(self, pos, AP_Energy, AP_threshold):
self.neurons.append(Brain.Neuron(pos, AP_Energy, AP_threshold))
EntityA = Brain()
EntityA.add_neuron((0, 10), 15, 24)