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__)