修改类对象外部的成员变量,并在类对象

时间:2016-02-25 10:45:19

标签: arrays python-3.x object numpy reference

我在python中有一个类:

class A:
  def __init__(self):
    self.obj = None
  def setObj(self, npArray):
    self.obj = npArray
  def getObj(self):
    return self.obj

在另一个python脚本中,我实例化A类的一个对象并设置" obj"然后把它带到其他地方

objOfA.setObj(npArray)

''' Some operations '''

objOut = objOfA.getObj()

''' More operations '''
np.append(objOut,[0.25])  ## Here np.append is used just as an example. There can be many other algebraic operations. 

''' operations using objOfA '''

在上面使用objOfA的操作中,我想看到修改后的数组(附加0.25)。

在C ++中,使用指针或引用很有可能。但我在python中很难做到这一点。我理解python如何以及何时使用对象的引用。我的问题就在于我

objOut = objOfA.getObj()

我正在获取数组的副本,但没有获得objOut的引用。

有没有办法可以做到这一点。

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

根据文档,np.append返回一个新数组(强调我的):

  

arr 的副本,附加到请注意,附加不会就地发生:分配并填充新数组。如果 axis 为None, out 是一个展平数组。

因此您必须将返回值分配回对象:

objOut.setObj(np.append(objOut.getObj(), [0.25]))

请注意,在Python中不鼓励使用getter和setter方法,您应该直接访问该对象:

objOut.obj = np.append(objOut.obj, [0.25])

如果你不依赖 numpy 数组,你可以使用可变的列表:

objOut.obj = [1, 2, 3]
objOut.obj.append(0.25)
objOut.obj.extend([4, 5, 6])