在一个对象上调用类的方法,会影响同一个类中的另一个对象

时间:2012-11-26 12:02:39

标签: python class

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument
  Unexpected connections between class instances

这是构建一个名为Neuron的类的代码:

class Neuron():
  def __init__(self,connection=[]):
      self.connection=connection
  def makeConnection(self,other):
      self.connection.append(other)
  def getConnection(self):
      return self.connection

如您所见,此类的每个对象都有自己与同一类的其他对象的连接。现在我建立了一组神经元:

P=[]
for i in range(5):
   P.append(Neuron())

现在,我想在我的神经元之间建立联系:让我们做一些简单的事情:

 P[1].makeConnection(P[2])

现在当我签入python时:

 P[2].getConnection()

它在它的连接列表中给了我P [2]!我刚刚在P [1]上应用了makeConnection方法,在地球上我将P [2]连接到自身!?!请有人帮忙!

1 个答案:

答案 0 :(得分:3)

更改

def __init__(self, connection=[]):
      self.connection = connection

def __init__(self, connection=None):
      if connection is None:
          connection = []
      self.connection = connection

否则所有对象最终都会引用相同的列表。当你改变一个神经元的连接时,所有其他神经元也会改变。