码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象基础(六)

时间:2019-11-28 23:15:45      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:方法   key   python   基础   val   taf   析构   ==   nbsp   

# 析构方法

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方法

 

面向对象基础(六)

标签:方法   key   python   基础   val   taf   析构   ==   nbsp   

原文地址:https://www.cnblogs.com/tengx/p/11954270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!