循环对象实例变量不会改变值

问题描述 投票:0回答:1

我有一个包含两个对象实例变量的类。

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
?这将节省大量重复代码,因为我的方法中唯一需要更改的部分是插入数据的位置。

python
1个回答
0
投票

我认为这应该很好用。

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]
© www.soinside.com 2019 - 2024. All rights reserved.