Python属性中的排序

2024-09-27 21:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

class SortingQueue:
    _queue = []

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

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

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


Tags: key代码selftruereturn排序queuedef
2条回答

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

编辑:在匆忙中我忽略了这是一个@财产的事实。我通常建议不要让属性更改“hidden attribute\u queue”。在这种情况下,我会这样做:

class SortingQueue:
    _queue = []

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

内置函数sorted排序不到位。它返回一个排序的列表self._queue.sort将就地排序。根据需要,您可以对列表进行排序,也可以只放置return sorted(...)

相关问题 更多 >

    热门问题