2016-02-25 122 views
0

我有在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

有沒有一種方式,我可以做到這一點。

預先感謝您。

回答

0

作爲每文檔,np.append返回一個新的陣列(重點煤礦):

副本ARR具有附加到軸線注意,追加就地不會發生:一個新的陣列分配和填充。如果是None,是扁平陣列。

所以,你將不得不返回值分配回你的對象:

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

注意的是,使用的getter和setter方法在Python是氣餒,你應該直接訪問對象:

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

如果你不依賴於numpy的陣列,你可以Ĵ ust使用可變列表:

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

謝謝你的回答......我用np.append作爲操作的例子。可以有其他的數學運算。還有關於吸氣和吸氣的功能。是的我同意。還有一些情況是obj通過類對象的層次結構傳遞。它會在這些情況下工作嗎?也是的,我依賴於numpy數組。 – AdityaG

+0

通常避免expresions像'X =樂趣(X)','X = X -...';使用像'x - = ...',x [:] = ...'。還要了解視圖和副本之間的區別。而且你不能在原地生長陣列。測試之類的東西'ID(X)'和'X .__ aray_interface__' – hpaulj

+0

是的,這並不重要,如果它的'objOut.obj'或'objOut.obj.and.more.hierachies.obj'。這真的取決於操作。改變numpy數組維數的事物通常不會就地修改數組,而numpy數組上的數學運算可以在原地進行(使用'+ ='或'* ='等賦值運算符)。 – poke