Я работаю над классом, который должен обновлять члены всякий раз, когда установлен один указанный c член. Простой пример, где _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.