我正在开发的程序使用嵌套类。顶层类名为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)
如果我需要从EntityA
中的第一个神经元调用add()
,我应该能够将它称为EntityA.neurons[0].add(value)
,因为当我创建神经元时,它应该自动将自己附加到列表中
我该怎么做呢?如果不可能,怎么做才能得到类似的结果呢
编辑:使用函数实例化类Neuron
并将其保存到Brain
实例内的列表中似乎是显而易见的答案。问题出现在函数Neuron.act()
中,该函数实例化了类Axon
,并且必须将其保存到一个列表中,该列表与用于神经元的Brain
的实例相同。以前的约束仍然适用
相关问题 更多 >
编程相关推荐