gpt4 book ai didi

python - 是否可以动态地将一个对象专门化为子类?

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:25 27 4
gpt4 key购买 nike

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

我想到了composition vs. inheritance ,但有很好的指标它应该是继承。

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)

最佳答案

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

或者您可以使用item.dict(),请参阅here了解差异的详细信息。

关于python - 是否可以动态地将一个对象专门化为子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60036870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com