内部类是否可以检索顶级类的实例



我正在处理的程序使用嵌套类。最上面的类被命名为Brain,它有两个内部类,NeuronAxon。内部类需要能够修改顶级类的实例变量。

Brain记录有多少神经元和轴突被实例化。CCD_ 5保持关于其动作电位及其输出的信息。CCD_ 6决定了如何将能量从一个神经元传递到另一个神经元。这样,每当我实例化一个神经元时,它就会保存在大脑的实例中。轴突也是如此。


这是我迄今为止的代码:

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实例相同的列表中。以前的约束仍然适用。

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)

最新更新