内部类能否检索顶级类的实例?

2024-05-19 14:00:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发的程序使用嵌套类。顶层类名为Brain,它有两个内部类NeuronAxon。内部类需要能够修改顶级类的实例变量

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


Tags: 实例self列表objectdefclassenergyap
1条回答
网友
1楼 · 发布于 2024-05-19 14:00:14
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)

相关问题 更多 >