eq方法
# class A: pass # a = A() # b = A() # print(a,b) # print(a==b) # eq 方法 # ==这个语法 是完全和__eq__相关的 class A: def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): if self.name == other.name and self.age == other.age: return True aa1 = A('Alex', 30) aa2 = A('Alex', 30) aa3 = A('Alex', 32) aa4 = A('Alex', 32) aa5 = A('Alex', 33) aa6 = A('Alex', 33) print(aa1==aa2)
二、实例:set中自定义hash与eq算法
set 的去重机制:先调用hash,在调用eq,eq不是每次都触发,只有hash值相等的时候才会触发
# 一个类 # 对象的属性: 姓名 性别 年龄 部门 # 员工管理系统 # 内部转岗 python开发 go开发 # 内部有1000个员工信息,其中可能有重复信息(假如出现:姓名+性别 相同则为同一个员工) # 去除重复员工 class Employee: def __init__(self, name, sex, age, partment): self.name = name self.sex = sex self.age = age self.partment = partment def __hash__(self): print('%s%s' % (self.name, self.sex)) return hash('%s%s' % (self.name, self.sex)) def __eq__(self, other): print('%s' % (self.name)) if self.name==other.name and self.sex==other.sex: return True employee_lst = [] for i in range(200): employee_lst.append(Employee('Alex', '男', 50, 'python开发')) for i in range(200): employee_lst.append(Employee('wusir', '男', 50, 'go开发')) for i in range(200): employee_lst.append(Employee('ritian', '男', 50, 'python开发')) print(len(employee_lst)) employee_lst = set(employee_lst) print(employee_lst) for el in employee_lst: print(el.__dict__)
运行结果:
600
Alex男
Alex男
Alex
Alex男
Alex
......
wusir男
wusir男
wusir
wusir男
wusir
......
ritian男
ritian男
ritian
ritian男
ritian
......
{<__main__.Employee object at 0x00589D50>, <__main__.Employee object at 0x005986D0>, <__main__.Employee object at 0x0059BFF0>}
{'name': 'Alex', 'sex': '男', 'age': 50, 'partment': 'python开发'}
{'name': 'wusir', 'sex': '男', 'age': 50, 'partment': 'go开发'}
{'name': 'ritian', 'sex': '男', 'age': 50, 'partment': 'python开发'}
Process finished with exit code 0

浙公网安备 33010602011771号