Использовать методы получения и установки свойств с назначением элемента? - PullRequest
0 голосов
/ 05 февраля 2020

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