我正在尝试实现一个类,其中一个方法会调用该类中的另一个方法并传递一个对象作为参数。被调用的方法将会改变这个对象。我的实现比较复杂,所以我将贴出一些虚拟代码,让你们理解我的意思:
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,真的需要一些帮助。
提前感谢!!
x = whatever
只是重新绑定了局部变量x
,它并没有改变任何东西。 - abarnertself.obj
吗?如果mult
仅仅返回x*n
,并且numtimes
执行self.obj = self.mult(self.obj, n)
,那么会起作用吗?这种方法并不适用于每个使用案例(例如,如果self.obj
是一个10000x10000的矩阵,您可能不希望生成额外的副本;如果其他代码引用了self.obj
并且需要看到变化,复制也无济于事)...但在某些情况下,它通常更简单。 - abarnert