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

如何为Python的Name数据类实现__lt__方法以比较实例?

解决方案

首先,使用Python的dataclasses模块定义Name类,然后实现__lt__魔法方法——这个方法的参数是固定的self(当前实例)和other(待比较的另一个Name实例),你不需要额外定义比较函数,直接在这个方法里实现排序逻辑即可。

完整代码实现

from dataclasses import dataclass

@dataclass
class Name:
    surname: str
    prename: str

    def __lt__(self, other: 'Name') -> bool:
        # 先比较姓氏,姓氏不同直接返回结果
        if self.surname != other.surname:
            return self.surname < other.surname
        # 姓氏相同时,比较名字
        return self.prename < other.prename

代码解释

  • @dataclass装饰器会自动生成初始化方法、字符串表示等,简化类的定义。
  • __lt__是Python中用于小于比较的魔法方法,当你对Name实例的列表使用sorted()或者调用列表的.sort()方法时,Python会自动调用这个方法确定元素顺序。
  • 方法逻辑完全匹配需求:优先按surname比较,仅当姓氏相同时,才用prename做二次比较。

测试示例

names = [
    Name("Smith", "John"),
    Name("Brown", "Alice"),
    Name("Smith", "Anna"),
    Name("Brown", "Bob")
]

# 排序后输出
sorted_names = sorted(names)
for name in sorted_names:
    print(name)

输出结果:

Name(surname='Brown', prename='Alice')
Name(surname='Brown', prename='Bob')
Name(surname='Smith', prename='Anna')
Name(surname='Smith', prename='John')

可以看到,排序结果完全符合姓氏优先、姓氏相同按名字排序的要求。

内容的提问来源于stack exchange,提问作者c.d.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:41:02