# 析构方法
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方法