我目前的情况是,我有一个类 (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)