首页 > 解决方案 > 使用属性获取器和设置器进行项目分配?

问题描述

我正在研究一个应该在设置一个特定成员时更新成员的类。更改_bar2时更新的简单示例:_bar1

class foo:
    def __init__(self, *args):
        self._bar1 = args[0]
        self._bar2 = args[1]

    @property
    def bar1(self):
        return self._bar1

    @bar1.setter
    def bar1(self, val):
        self._bar1 = val
        self._bar2 += self._bar1

但是,如果类型_bar1(也可能_bar2)支持项目分配(例如 NumPy-arrays)并且只需要更改一些项目怎么办?换句话说,我如何更改代码以使其工作:

import numpy as np
a = np.random.rand(3)
c = foo(a, 2)
c.bar1[0] = 1.

到目前为止,我只找到了indexedproperty可以通过 pip 安装的软件包,并且似乎完全符合我的要求。但是,出于多种原因,我不希望库需要“非标准”包?有谁知道另一种方式?所以我想做到这一点:

class foo:
# (...)
    def set_bar1(self, idx, val):
        self._bar1[idx] = val
        self._bar2 += self._bar1
# (...)
c.set_bar1(2, 3.)

但有直接的项目分配,即

c.bar1[2] = 3.

标签: pythonpython-3.xpython-decorators

解决方案


推荐阅读