Обновление одного объекта-значения в большом списке на объекте - PullRequest
0 голосов
/ 19 марта 2020

У меня есть следующая модель в Python, с IndexPrice в качестве объекта значения и Index в качестве объекта со списком прикрепленных цен. Индексная цена не имеет смысла без индекса.

    @dataclass(frozen=True, eq=True)
    class IndexPrice:
        datetime_reported: datetime.datetime
        amount: Decimal
        currency: str


    class Index:
        def __init__(
                self,
                index_code: str,
                specification: str
        ):
            self.stable_index_code = index_code  # type: str
            self.specification = specification  # type: str
            self._prices = set()  # type: Set[IndexPrice]

        def add_price(self, index_price: IndexPrice):
            self._prices.add(index_price)

        def list_prices(self) -> List[IndexPrice]:
            return list(self._prices)

Ожидается, что список цен индекса на индекс станет относительно большим и в конечном итоге неограниченным по размеру. Некоторые списки будут начинаться с 36 500 наименований.

Мне необходимо заменить отдельные цены в индексе, однако у меня нет ни одного идентификатора, на который можно сослаться. Я понимаю концепцию объекта-значения, не имеющего долгосрочной идентичности, и что он может быть заменен.

Однако я действительно задаюсь вопросом о том, как лучше найти / заменить индексную цену в этом случае. Наивным способом реализации этого может быть

class Index:
# ~~~ existing content snipped ~~~

    def replace_price(
            self,
            old_index_price: IndexPrice,
            new_index_price: IndexPrice,
    ):
        self._prices = set([
            index_price if not old_index_price else new_index_price for index_price in self._prices
        ])


Я чувствую, что эта реализация немного неаккуратна, в первую очередь потому, что все на уровне обслуживания, которое должно заменить индексную цену, должно знать каждую деталь как старого и новая цена.

Мне не хватает другой, лучшей реализации или мне нужно начать рассматривать вопрос о том, чтобы сделать IndexPrice сущностью в своем собственном праве?

...