我試圖用調用另一個方法的方法實現一個類,該對象是最低方法變異對象的一部分。我的實現是一個有點複雜,所以我會後只是一些假的代碼,所以你可以看到我在談論:Python:將可變(?)對象傳遞給方法
class test:
def __init__(self,list):
self.obj = list
def mult(self, x, n):
x = x*n
def numtimes(self, n):
self.mult(self.obj, n)
現在,如果我創建這個類型的對象並運行numtimes方法,它不會更新self.obj:
m = test([1,2,3,4])
m.numtimes(3)
m.obj #returns [1,2,3,4]
雖然我希望它給我[1,2,3,4,1,2,3,4,1,2,3,4 ]
基本上,我需要通過self.obj到MULT方法,並將它發生變異self.obj這樣,當我打電話m.obj,我會得到[1,2,3,4,1,2 ,3,4,1,2,3,4]而不是[1,2,3,4]。我覺得這只是一個理解python如何將對象作爲參數傳遞給方法的問題(比如它創建了對象的副本,而不是我需要使用指針),但也許不是。我是python的新手,真的可以在這裏使用一些幫助。
在此先感謝!
Python沒有指針;當你將一個變量傳遞給一個函數時,你只是將函數參數綁定到變量綁定的相同值。如果這是一個可變的值,你可以改變它。你的問題是'x = whatever'只是重新綁定局部變量'x',它不會改變任何東西。 – abarnert
同時,你是否真的需要在原地進行'self.obj'的變異?如果'mult'只是'返回x * n',並且'numtimes'確實'self.obj = self.mult(self.obj,n)',那會起作用嗎?這不適用於每個用例(例如,如果'self.obj'是一個10000x10000矩陣,您可能不想創建額外的副本;如果其他代碼具有對'self.obj'的引用並需要查看改變,製作副本不會有幫助)......但是當它發生時,它通常更簡單。 – abarnert
感謝您解決這個問題。回想起來,我認爲我應該在'mult'中包含一個數組元素賦值,因爲這真的是我想要做的最重要的操作。我只是爲了簡單而使用'x = x * n',但是我意識到它會讓事情變得混亂。我真的需要根據'mult'方法中的某些邏輯來改變'self.obj'的元素。 – nViz