我在第一节中具有以下功能update_value
,如果某些键匹配,则应返回字典,然后更新键的值
或者如果提供了rate,则更新所有密钥的值。我还需要设置密钥的类型。搜索后,好像我
应该创建自己的数据类,并且我有第二节中的代码。但是如果我有更好的方法呢?
#section I
def update_value(**kwargs):
default = dict(a=0.1, b=0.2, c=0.3)
if kwargs.get('rate'):
return {k: v * kwargs['rate'] for k, v in default.items()}
default.update(**kwargs)
return default
#section II
from dataclasses import dataclass, field, fields
@dataclass
class TestValue:
"""
This describes how to map default bidding value for advance bid value
"""
a: float = field(default=0.1)
b: float = field(default=0.5)
c: float = field(default=25.0)
def update(self, rate):
for field in fields(self):
setattr(self, field.name, getattr(self, field.name) * rate)
if __name__ == '__main__':
v_I = update_value(a=8) # v = {'a': 8, 'b': 0.2, 'c': 0.3}
v_I = update_value(a=8, b=18) # v = {'a': 8, 'b': 18, 'c': 0.3}
v_I = update_value(rate=10) # v = {'a': 1.0, 'b': 2.0, 'c': 3.0}
def func(v: TestValue, **kwargs):
return v(**kwargs)
v_II = TestValue()
v_II.update(10) # v_I = {'a': 1.0, 'b': 2.0, 'c': 3.0}
func(v_II, a=8, b=18)# v_I = {'a': 8, 'b': 18, 'c': 0.3}