我正在编写的类需要使用存储numpy数组的变量名属性。我想为这些数组的切片分配值。我一直在使用setattr,以便可以保留属性名称的不同。我为切片分配值的尝试是:

class Dummy(object):
        def __init__(self, varname):
        setattr(self, varname, np.zeros(5))

d = Dummy('x')
### The following two lines are incorrect
setattr(d, 'x[0:3]', [8,8,8])
setattr(d, 'x'[0:3], [8,8,8])


setattr的以上两种用法均未产生我想要的行为,即d.x是具有条目[8,8,8,0,0]的5元素numpy数组。使用setattr可以做到这一点吗?

最佳答案

考虑一下您通常如何编写以下代码:

d.x[0:3] = [8, 8, 8]
# an index operation is really a function call on the given object
# eg. the following has the same effect as the above
d.x.__setitem__(slice(0, 3, None), [8, 8, 8])


因此,要执行索引操作,您需要获取名称x所引用的对象,然后对其执行索引操作。例如。

getattr(d, 'x')[0:3] = [8, 8, 8]

关于python - 同时使用内置setattr和索引切片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27891546/

10-13 21:44