我是靠谱客的博主 狂野身影,最近开发中收集的这篇文章主要介绍python面向对象之内置函数和set集合,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目创建一个类,类的初始化属性有4个,姓名,性别,年龄,部门,姓名和年龄相同的对象就相当于同一个对象

要求 创建1000个对象,然后对这1000个对象进行去重

我们看见去重这个关键字就应该先想到set集合去重,集合去重的本质是对集合里的每一个元素进行hash计算,得到一个hash值,由于同一个值在同一个python代码操作里的hash值是不变的,所以集合就可以根据hash值来实现去重
首先我们要先创建一个类

class Employee:
def __init__(self,name,sex,age,department):
self.name = name
self.sex = sex
self.age = age
self.department = department

我们现在创建了一个类并且构造了初始化方法,我们现在这个类按照题目要求实例化1000个了以后可以去重了吗?还不可以,因为现在使用set集合去重得到的hash值是每个对象的hash值,但是每个对象都是不一样的所以hash值是不同的,我们得在类中自定义返回的hash值:

class Employee:
def __init__(self,name,sex,age,department):
self.name = name
self.sex = sex
self.age = age
self.department = department
def __hash__(self):
return hash('%s%s' %(self.name,self.sex))

我们现在可以进行去重了吗?可以运行一下试试,会发现,还不行,这是为什么呢?我明明已经自定义了返回的hash值,为什么还不可以去重呢?这是因为除了对hash值进行比对我们还要对值也进行比对,只有hash值重复了,值也重复了我们才能断定这个对象重复了

class Employee:
def __init__(self,name,sex,age,department):
self.name = name
self.sex = sex
self.age = age
self.department = department
def __hash__(self):
return hash('%s%s' %(self.name,self.sex))
def __eq__(self,other):
if self.name == other.name and self.sex == other.sex:
return True

我又在里面添加了一个eq方法,这个方法的作用是hash值相同还要对值进行比对时就会调用,现在就可以使用set集合来对对象去重了

class Employee:
def __init__(self, name, sex, age, department):
self.name = name
self.sex = sex
self.age = age
self.department = department
# 自定义返回hash值
def __hash__(self):
return hash('%s%s' % (self.name, self.sex))
# 对hans值进行对比之后还要对值进行对比就要用到eq方法
def __eq__(self, other):
if self.name == other.name and self.sex == other.sex:
return True
employee_list = []
for i in range(250):
employee_list.append(Employee('jojo', 'male', 25, 'fighting'))
for i in range(250):
employee_list.append(Employee('jack', 'male', 28, 'sale'))
for i in range(250):
employee_list.append(Employee('rose', 'female', 28, 'finance'))
for i in range(250):
employee_list.append(Employee('tom', 'male', 6, 'cat'))
employee_set = set(employee_list)
for person in employee_set:
print(person.__dict__)

{‘name’: ‘rose’, ‘sex’: ‘female’, ‘age’: 28, ‘department’: ‘finance’}
{‘name’: ‘tom’, ‘sex’: ‘male’, ‘age’: 6, ‘department’: ‘cat’}
{‘name’: ‘jack’, ‘sex’: ‘male’, ‘age’: 28, ‘department’: ‘sale’}
{‘name’: ‘jojo’, ‘sex’: ‘male’, ‘age’: 25, ‘department’: ‘fighting’}

可以看到,成功的对1000个对象实现了去重,这个题目考到面对对象的内置方法,和set集合去重以及去重的本质这些知识点

最后

以上就是狂野身影为你收集整理的python面向对象之内置函数和set集合的全部内容,希望文章能够帮你解决python面向对象之内置函数和set集合所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部