Python在@property中排序

时间:2018-09-28 16:33:00

标签: python python-3.x

class SortingQueue:
    _queue = []

    @property
    def queue(self):
        sorted(self._queue, key=attrgetter("votes"), reverse=True)
        return self._queue

我有这段代码,但是当我在此类中引用队列时,会得到未排序的版本。将其排序在功能之外。在这种情况下,您不能使用@property有什么限制吗?

我们需要这样做,因为我们将更改_queue中的值,这将更改输出的排序顺序。

2 个答案:

答案 0 :(得分:3)

sorted()返回一个新排序的列表,同时保持self._queue不变。 为了使您的代码按您期望的方式工作,您应该调用方法.sort()

class SortingQueue:
    _queue = []

    @property
    def queue(self):
        self._queue.sort(key=attrgetter("votes"), reverse=True)
        return self._queue

使用sorted()修复它的另一种方法是:

class SortingQueue:
    _queue = []

    @property
    def queue(self):
        self._queue = sorted(self._queue, key=attrgetter("votes"), reverse=True)
        return self._queue

edit:我急忙忽略了这是@property的事实。我通常建议不要让属性更改“隐藏属性_queue”。在这种情况下,我会这样做:

class SortingQueue:
    _queue = []

    @property
    def queue(self):
        return sorted(self._queue, key=attrgetter("votes"), reverse=True)

答案 1 :(得分:1)

内置函数opacity : 1不能就地排序。它返回一个排序列表。 sorted将就地排序。根据您的需要,您可以对列表进行排序,也可以只放入self._queue.sort