python - @property 中的 Python 排序
问题描述
class SortingQueue:
_queue = []
@property
def queue(self):
sorted(self._queue, key=attrgetter("votes"), reverse=True)
return self._queue
我有这个代码,但是当我在这个类中引用队列时,我得到一个未排序的版本。在函数之外对其进行排序是可行的。@property
在这种情况下,您有什么不能使用的限制吗?
我们需要这个,因为我们将更改其中的值,_queue
这将改变输出的排序顺序。
解决方案
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)
推荐阅读
- java - 如果选中复选框,该怎么办?
- php - Framework7 Vue 承诺 postJson CORS 问题
- python - 使用 Tkinter 创建复选框,然后将选定框的值放入列表中
- swift - 边框 TableView 部分
- codenameone - 如何在 theme.css 中选择原生等宽字体?
- python - 如何建造 | 编写一个 Indeed 机器人来自动申请应用程序?
- php - 为我的项目创建搜索和显示功能,但无法从数据库中获取结果以显示
- angular - 将输入设置为空值的角度问题
- javascript - stencil js,将数组作为自定义元素中的属性值传递
- html - 有条件地将 HTML 列表一分为二