0

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()))
4

1 回答 1

0

我认为你的“罪”是基于一种误解。:)

将缺失的参数“转换”为计算值是 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()))
于 2020-06-06T04:57:13.077 回答