我在初始化对象时遇到问题,而且方法会覆盖我不想覆盖的数据。
如果我的术语不正确,我道歉,因为我使用多种编码语言进行工作,而且在来回弹跳时我倾向于忘记一些术语。
示例:
class SR(object):
def __init__(self,arg1):
...some code with arg1...
...import some stuff into a,b,c,d,e...
self.A = array([a,b,c,d,e)]
print self.A
self.B = self.func1(self.A)
print self.A
print self.B
def func1(self,arg2):
arg2[:,:] += ...some math...
arg2[:,:] *= ...more math...
arg3 = ...total of some stuff in arg2...
return arg3
def func2(self,arg4):
...use func3...
...use func1...
return arg5
def func3(self,arg4):
return arg6
def func4(self,arg7):
...output some stuff...
instance = SR(2012)
data = {...numbers...}
X = instance.func2(data)
instance.func4('label1')
data = {...numbers...}
X = instance.func2(data)
instance.func4('label2')
data = {...numbers...}
X = instance.func2(data)
instance.func4('label3')
data = {...numbers...}
X = instance.func2(data)
instance.func4('label4')
data = {...numbers...}
X = instance.func2(data)
instance.func4('label5')
打印:
[a,b,c,d,e]
[a,not_b,not_c,d,not_e]
[sum-of-a-not_b-not_c-d-not_e]
问题:
打印的第二行应该看起来像第一行。我希望能够更改self.A中的值,但我不想永久更改它们。我认为func1只会接收一个引用或指向self.A的指针,但它似乎是在覆盖self.A。
我该如何解决这个问题?
请记住,我需要使用func1永久更改每个实例中的数据,但不能在self.A中使用。
答案 0 :(得分:0)
如果您不想更改self.A,那么当您调用func1时,您应该通过:
self.func1(list(self.A))
答案 1 :(得分:0)
问题是你的func1
方法修改了它的参数:
def func1(self,arg2):
arg2[:,:] += ...some math...
arg2[:,:] *= ...more math...
您可能有充分的理由这样做,但它可能会产生一些意想不到的副作用,正如您所经历的那样。您有两种选择:
修改func1
,这样就不会修改参数。例如:
def func1(self, arg2):
arg2_copy = arg2.copy()
arg2_copy[:,:] += ....
将参数的副本传递给func1
:
self.B = self.func1(self.A.copy())
我使用.copy
方法,因为我认为self.A
是ndarray
。如果不是这样,你将不得不使用正确的技巧(比如制作另一个列表或其他字典......)