面向对象基础(六)

# 析构方法

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方法
原文地址:https://www.cnblogs.com/tengx/p/11954270.html