面向对象基础(六)
# 析构方法 class F: def __init__(self,filePath): self.f = open(filePath) def __del__(self): self.f.close() print(11) f1 = F('demo.py') # 当python文件执行完毕,垃圾回收机制会回收变量,当对象a1被删除时则触发del方法 # 关于item系列 class A: def __getitem__(self, item): return getattr(self,item) def __setitem__(self, key, value): setattr(self,key,value) def __delitem__(self, key): delattr(self,key) a1 = A() a1['k'] = 'value' print(a1['k']) # 当用[]访问时就会触发item系列
# 这里我看一个去重的案例 # 1000个员工 # 如果几个员工对象的姓名和性别相同,这是一个人 # 请对这1000个员工做去重 # 首先创建一个员工类 class Staff: def __init__(self,name,age,sex,partment): self.name = name self.age = age self.sex = sex self.partment = partment # 自己给对象指定一个hash算法 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 lst = [] for i in range(200): lst.append(Staff('Tian',i,'男','OAM')) for i in range(200): lst.append(Staff('Xian',i,'男','OAM')) for i in range(200): lst.append(Staff('Sian',i,'男','OAM')) lst = set(lst) print(lst) # 在set集合去重的时它首先计算hash值,当值不相同时它会比较两个值是否相同,因为每个对象的内存都是不相同的所以我们这里也需要自己定义eq方法