python-attrs - 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()))
推荐阅读
- kubernetes - 无法从外部访问 Kubernetes 仪表板
- spring - 使用 swagger-codegen-cli-2.3.1 生成 Spring Boot api 时,是否有任何用于添加日志记录或异常处理的小胡子模板?
- elasticsearch-5 - 如何在冻结的地图中搜索 elassandra?
- scala - 覆盖镶木地板文件会在火花中引发异常
- javascript - 如何在 ReactOpenSeadragon 中添加多个图块图像
- reactjs - SCRIPT438:对象不支持属性或方法“分配”
- css - 是否可以从开发工具直接写入 sass 部分?
- angular - Tuckey url 用 spring boot 重写,angular 4 导致奇怪的错误?
- java - 计算 JTable 中选定单元格的值的总和
- java - JPA datasorce 忽略属性文件中的用户名