- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前的情况是,我有一个类(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 ,但有很好的指标它应该是继承。
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/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!