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

Python如何将自定义Students类的实例对象添加到set集合中

实例存入set的操作方法

基础存入方案(无需实例去重)

如果你的需求仅为将实例存入set,不需要做重复实例的过滤,直接使用以下两种方式操作即可:

  • 方式1:创建set时直接传入实例作为初始元素
student_set = {Mark, Lisa}
  • 方式2:创建空set后调用add()方法逐个添加
student_set = set()
student_set.add(Mark)
student_set.add(Lisa)

注意:默认自定义类的实例哈希值基于内存地址生成,只要不是同一个内存地址的实例,就算所有属性完全一致,set也会判定为不同元素,可以重复存入。


进阶方案(需要按属性去重)

如果你的需求是学生的姓名和年龄完全相同就视为同一个学生,不允许重复存入set,需要先给Students类补充实现__eq__和__hash__两个魔法方法,修改后的类代码如下:

class Students:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show_info(self):
        return "'{}': {}".format(self.name, self.age)

    def __str__(self):
        return self.show_info()
    
    # 补充相等判定逻辑
    def __eq__(self, other):
        if not isinstance(other, Students):
            return False
        return self.name == other.name and self.age == other.age
    
    # 补充哈希值生成逻辑,和相等判定的属性保持一致
    def __hash__(self):
        return hash((self.name, self.age))

Mark = Students(name="Mark", age=21)
Lisa = Students(name="Lisa", age=19)

修改完成后再用上面的存入操作,就能实现属性重复的实例自动去重的效果。

效果验证

遍历set打印所有学生信息的示例代码:

for stu in student_set:
    print(stu)

输出结果:

'Mark': 21
'Lisa': 19

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:24:03