python - 使用属性获取器和设置器进行项目分配?
问题描述
我正在研究一个应该在设置一个特定成员时更新成员的类。更改_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.
解决方案
推荐阅读
- html - 如何在 CSS 中使父元素(跨度)对子元素(输入)进行转换?
- j - 如何从 J 中的下表中操作/提取信息
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“标题”
- java - 如何在猜数游戏中增加猜数限制?
- amazon-web-services - aws cli 创建一个具有生存时间规范的表
- asp.net-core - 在 ASP.NET Core 中使用 Kestrel Server 或 SignalR Server 有什么区别?
- python - Python 在尝试访问共享内存时死机
- vb.net - vb.net 如何只读取 html 模板文件的特定部分
- ruby - 如何在不为提供者使用额外 gem 的情况下使用 Devise omniauth 功能?
- python - 在numpy数组中找到最大第三个元素的点