【问题标题】:Is it possible to make an Attrs class comparable based on computed properties?是否可以根据计算属性使 Attrs 类具有可比性?
【发布时间】:2020-05-08 13:41:17
【问题描述】:

我正在使用 Python3.7 为我的项目实现一个简单的负载均衡器。

我使用queue.PriorityQueue 来保存一组预定义的工人。工人在队列中的顺序是由他们的每个负载定义的,这些负载是根据分配给工人的工作数量来评估的。也就是说,有一个jobs 属性,它是一个Job 实例的列表,并且加载是由jobs 的长度计算的。

作业分配的每次迭代,通过queue.get() 检索负载最低(作业数量最少)的工人,分配后,它将以put 返回队列。

这里是简化的 sn-p。

import attr
from typing import List

from .job import Job

@attr.s(order=True)
class Worker:
    jobs: List[Job] = attr.ib(factory=list, order=False)

    @property
    def loading(self):  # how to make Worker comparable according to this property?
        return len(self.jobs)

我知道如果我自己添加那些用于比较的 dunder 方法,即__ne____lt____le____gt____ge__,我可以实现这一点。

但我的问题是,是否可以根据计算属性使 attrs 类具有可比性? 如果可能,如何实现?

【问题讨论】:

    标签: python-3.x python-attrs


    【解决方案1】:

    attrs 不幸的是目前没有对属性的直接支持。我认为你最好的选择是离开order=False 并使用functools.total_ordering

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多