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

posted @ 2021-02-24 12:23  跳动0101  阅读(316)  评论(0)    收藏  举报