如何更新数据类python的值

时间:2019-09-10 21:06:45

标签: python-3.x

我在第一节中具有以下功能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}

0 个答案:

没有答案