首页 > 解决方案 > @property 中的 Python 排序

问题描述

class SortingQueue:
    _queue = []

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

我有这个代码,但是当我在这个类中引用队列时,我得到一个未排序的版本。在函数之外对其进行排序是可行的。@property在这种情况下,您有什么不能使用的限制吗?

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

标签: pythonpython-3.x

解决方案


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

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

class SortingQueue:
    _queue = []

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

推荐阅读