You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用property的getter作为可调用函数:__get__用法是否正确?

关于property装饰器生成的getter作为sort key的问题

你的实现是否正确?

这种Numbers.num.__get__的写法是正确的。

原因是:@property装饰后的num本质是一个property描述符对象,它的__get__方法是专门用于从实例中获取属性值的绑定方法。当把它作为key传入list.sort()时,排序过程会自动将每个Numbers实例作为参数传给这个__get__方法,最终返回对应的_num值,以此作为排序依据。

更优的解决方案

虽然你的写法可行,但有几种更直观、可读性更强的替代方案:

1. 使用lambda表达式(最常用)

直接通过lambda获取实例的num属性,代码简洁易懂:

nums.sort(key=lambda x: x.num)

2. 使用operator.attrgetter

如果需要复用属性获取逻辑,或者要同时基于多个属性排序,可以用operator模块的attrgetter:

from operator import attrgetter

nums.sort(key=attrgetter('num'))

3. 定义普通getter方法

如果类本身需要暴露可调用的属性获取方式,可以额外定义一个普通方法:

class Numbers:
    # ... 其他代码 ...
    def get_num(self):
        return self._num

# 排序时直接用方法引用
nums.sort(key=Numbers.get_num)

内容的提问来源于stack exchange,提问作者yota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:01:43