我有一个包含两个对象实例变量的类。
import numpy as np
class test(object):
def __init__(self):
self.a=np.array((1,2))
self.b=np.array((1,2))
我需要一个对每个变量执行类似操作的方法。我认为我可以循环该变量,它会改变适当的值。但是,当我执行 numpy insert 并将值分配给
a
时,它不会改变 self.a
。
def indirect_method(self):
arrs = [self.a, self.b]
for a in arrs:
a = np.insert(l,1,3)
t=test()
t.indirect_method()
t.a
Out[82]: array([1, 2])
t.b
Out[83]: array([1, 2])
如果我打印
self.a
和a
的ID,最初它们是相同的,但是在插入操作之后,a
的ID发生变化。
def indirect_method(self):
arrs = [self.a,]
print(id(self.a))
for a in arrs:
print(id(a))
a = np.insert(l,1,3)
print(id(a))
t=test()
t.indirect_method()
4756930896
4756930896
4744668432
如果我直接修改对象变量,它就可以正常工作。
def direct_method(self):
self.a = np.insert(self.a,1,3)
self.b = np.insert(self.b,1,3)
t=test()
t.direct_method()
t.a
Out[77]: array([1, 3, 2])
t.b
Out[78]: array([1, 3, 2])
如何通过中间变量更新
self.a
和 self.b
?这将节省大量重复代码,因为我的方法中唯一需要更改的部分是插入数据的位置。
我认为这应该很好用。
import numpy as np
class test(object):
def __init__(self):
self.a=np.array((1,2))
self.b=np.array((1,2))
def indirect_method(self):
for el in dir(self):
if el in ['a', 'b'] and hasattr(self, el):
setattr(self, el, np.array((1,2,3,4,5)))
x = test()
x.indirect_method()
print(x.a) ## output [1 2 3 4 5]