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
相关产品推荐
相关产品推荐

