【问题标题】:How can I make Objects communicate with each other in Python?如何让对象在 Python 中相互通信?
【发布时间】:2022-01-14 00:13:13
【问题描述】:

我正在为神经元做一个小项目。

我创建了一个名为Neurons 的课程。我设置了connections = []。 我创建了一个名为connect() 的函数来通过突触连接两个神经元。 如果一个神经元触发,connections 列表中的所有其他神经元都会收到信号。

我怎样才能让同一类中的两个不同对象相互通信,以便神经元知道他们的伙伴之一是否刚刚向他们开火?

代码如下:

class Neuron: 
  def __init__(self, type='interneuron'):
    self.type = type
    self.connections = []

  def connect(self, neuron):
    self.connections.append(neuron)

  def receive(self): pass

  def fire(self): pass


n1 = Neuron()
n2 = Neuron('motor')
n1.connect(n2)

replit 的链接在这里:https://replit.com/@EmmaGao8/Can-I-make-Neurons#main.py

感谢您的时间和考虑。

【问题讨论】:

  • 由于 type 是 Python 中的内置函数,我建议不要使用 type 作为属性和变量名。最好使用neuron_type 之类的名称。
  • @ShabbirKhan 使用type 作为属性没有问题,它不会影响内置名称。
  • @juanpa.arrivillaga,是的,它不会。在我看来,使用内置名称作为属性似乎是一种糟糕的风格。这个答案和 cmets 提供了更多细节:stackoverflow.com/a/28091085/5302861

标签: python python-3.x class object communicate


【解决方案1】:

您可以遍历所有其他神经元并执行receive 函数。

例如:

def fire(self):
    for other in self.connections:
        other.receive() #and whatever other things you want

def receive(self):
    print("Signal Received!") #or whatever else you want

如果这对您有帮助,请接受此答案以供将来参考(单击复选标记),如果没有,请告知。

【讨论】:

    【解决方案2】:

    当您使用Neuron 类的connect() 方法将n2 添加到n1connections 列表中时,您正在创建实例之间的链接。

    如果您打印n1.connetionsn2,您会看到它们指向内存中的同一个对象。因此,您可以将fire() 方法与receive() 方法一起定义如下:

    def receive(self): pass
    
    def fire(self):
        # do something
        for n in self.connections:
            n.receive()
    

    【讨论】:

    • 我可能误解了一些东西,但您能否解释一下这如何为我的(已经存在的)答案添加新信息?
    • 您的答案是在我完成我的工作时发布的。由于我已经投入工作来写我的答案,所以我决定保留它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2013-05-03
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    相关资源
    最近更新 更多