class SortingQueue:
_queue = []
@property
def queue(self):
sorted(self._queue, key=attrgetter("votes"), reverse=True)
return self._queue
我有这段代码,但是当我在此类中引用队列时,会得到未排序的版本。将其排序在功能之外。在这种情况下,您不能使用@property
有什么限制吗?
我们需要这样做,因为我们将更改_queue
中的值,这将更改输出的排序顺序。
答案 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
。