有没有办法在Python attrs中让转换器引用自身属性? 现在我正在使用__attr_post_init__
但这感觉像是一种罪过。
@attrs
class WindowLayout(object):
panel_xxyy_boxes = attrib(type=Dict[str, Tuple[int, int, int, int]])
size = attrib(type=Tuple[int, int], default=None)
def __attrs_post_init__(self):
if self.size is None:
self.size = (max(x for _, x, _, _ in self.panel_xxyy_boxes.values()), max(y for _, _, _, y in self.panel_xxyy_boxes.values()))
我认为你的"罪"是基于一种误解。 :)
将缺少的参数"转换"为计算值是 attrs 的默认值。
根据您的示例,这样的事情应该有效:
@attrs
class WindowLayout(object):
panel_xxyy_boxes = attrib(type=Dict[str, Tuple[int, int, int, int]])
size = attrib(type=Tuple[int, int])
@size.default
def _size_default(self):
return (max(x for _, x, _, _ in self.panel_xxyy_boxes.values()), max(y for _, _, _, y in self.panel_xxyy_boxes.values()))