1

我目前的情况是,我有一个类 (Item) 和一个子类 (ScoredItem) 以及一个将 Item 变为 ScoredItem 的函数。该代码工作正常,但它需要我重新创建现有对象。可能会发生Item另一个具有默认值的属性,这会破坏代码。例如,如果Item有一个属性total_interactions : int = 0,那么插入的项目列表score_items很可能没有total_interactions=0。但是如果score_items不调整,那么它就会默默地失败。有没有办法防止这种情况?像scored_item = ScoredItem(score=0.123, **item)什么?或者item.score = 0.123; scored_item = ScoredItem(item)

我考虑过组合与继承,但有很好的指标应该是继承。

MVCE

import random
from typing import List

from pydantic import BaseModel


class Item(BaseModel):
    item_id: str
    title: str


class ScoredItem(Item):
    score: float


def get_items() -> List[Item]:
    # generate n random items
    n = 10
    return [Item(item_id=str(i), title="foobar") for i in range(n)]


def score_items(items: List[Item]) -> List[ScoredItem]:
    scored_items = []
    for item in items:
        scored_item = ScoredItem(
            # Everything an Item has
            item_id=item.item_id, title=item.title,
            # Plus the score
            score=random.random()
        )
    return scored_items


items = get_items()
scored_items = score_items(items)
4

1 回答 1

0

除非我错过了你需要的东西ScoredItem(score=0.123, **dict(item))

或者您可以使用item.dict(),有关差异的详细信息,请参见此处

于 2020-02-03T10:15:07.570 回答