Python Attr:使用其他属性的转换器?



有没有办法在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()))

最新更新