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

