Python 如何使用attrs将字符串反序列化为不可变对象?

Python 如何使用attrs将字符串反序列化为不可变对象?,python,python-attrs,Python,Python Attrs,我有一个字符串日志,我想用尽可能少的样板代码反序列化成一个对象 当前解决方案不使用属性: # @attr.s(frozen=True) class MyLog(): def __init__(self, log_str="a=1 b=2 c=3"): pairs = [pair.split('=') for pair in log_str.split(' ')] for k, v in pairs: print("{} = {}"

我有一个字符串日志,我想用尽可能少的样板代码反序列化成一个对象

当前解决方案不使用属性:

# @attr.s(frozen=True)
class MyLog():

    def __init__(self, log_str="a=1 b=2 c=3"):
        pairs = [pair.split('=') for pair in log_str.split(' ')]
        for k, v in pairs:
            print("{} = {}".format(k, v))
            # k = attr.ib(v)
        self.a = pairs[0][1]
        self.b = pairs[1][1]
        self.c = pairs[2][1]


print(MyLog().__dict__)

我可以使用
attrs
将此日志反序列化为不可变对象吗?

最佳做法是让init获取属性值,并使用工厂方法从上面建议的字符串进行转换

下面的代码没有经过测试,但它演示了这个想法:

@attr.s(frozen=True)
class MyLog():

    @classmethod
    def from_log_str(cls, log_str="a=1 b=2 c=3"):
        pairs = [pair.split("=") for pair in log_str.split(" ")]

        return cls(
            a=pairs[0][1],
            b=pairs[1][1],
            c=pairs[2][1],
        )

    a = attr.ib()
    b = attr.ib()
    c = attr.ib()

print(MyLog.from_log_str().__dict__)