1、析构方法:释放一个空间之前执行 (new构造方法  申请一个空间)

某对象借用了操作系统的资源,还要通过析构方法归还回去 : 文件资源  网络资源

1)垃圾回收机制

class A:def __del__(self):# 析构方法 del A的对象 会自动触发这个方法print('执行我了')
a = A()
del a  # 对象的删除 del
print(a)

此时执行结果异常

更改后(将del a这一行注释掉)

class A:def __del__(self):# 析构方法 del A的对象 会自动触发这个方法print('执行我了')
a = A()
#del a  # 对象的删除 del
print(a)

此时执行结果正常

以上例子就是将我们定义的变量手动清理,上面因为清理了所以后面打印就会报错,下面的例子则正常执行

2) 不管是主动还是被动,下面的f对象总会被清理掉,被清理掉就触发__del__方法,触发这个方法就会归还操作系统的文件资源

class File():# 处理文件的def __init__(self,file_path):self.f = open(file_path)self.name = 'alex'def read(self):self.f.read(1024)def __del__(self):   # 是去归还/释放一些在创建对象的时候借用的一些资源# del 对象的时候   程序员触发# python解释器的垃圾回收机制 回收这个对象所占得内存的时候  python自动触发的self.f.close()
f = File('liuys.txt')
f.read()

注:申请一块儿空间是操作系统分配,以及在这一块儿空间之内的所有事儿都归的python解释器来管理

3)操作流程:# python --> 操作系统 --> 文件操作符 --> 硬盘里的文件

f = open('wenjian') f.close()

关闭python解释器的内存

del f 

2、item系列(和对象使用[]访问值有联系)

例如:

obj = {'k':'v'}
print(obj)   # 字典的对象
print(obj['k'])

在内置的模块中,有一些特殊的方法,要求对象必须实现__getitem__/__setitem__才能使用

例如:

字典模型

class B:def __getitem__(self, item):return getattr(self,item)def __setitem__(self, key, value):setattr(self,key,value*2)def __delitem__(self, key):delattr(self,key)
b = B()
# b.k2 = 'v2'
# print(b.k2)
b['k1'] = 'v1'  # __setitem__
print(b['k1'])  # __getitem__
del b['k1']     # __delitem__
print(b['k1'])

列表模型

class B:def __init__(self,lst):self.lst = lstdef __getitem__(self, item):return self.lst[item]def __setitem__(self, key, value):self.lst[key] = valuedef __delitem__(self, key):self.lst.pop(key)
b = B(['111','222','ccc','ddd'])
print(b.lst[0])
print(b[0])
b[3] = 'alex'
print(b.lst)
del b[2]
print(b.lst)

3、hash方法

底层数据结构基于hash值寻址的优化操作
hash是一个算法
能够把某一个要存在内存里的值通过一系列计算,
保证不同值的hash结果是不一样的

'127647862861596'  ==> 927189778748

对同一个值在多次执行python代码的时候hash值是不同
但是对同一个值 在同一次执行python代码的时候hash值永远不变


所有的hash之不会变
print(hash('abc'))  # 6048279107854451739
print(hash('abc'))
print(hash('abc'))
print(hash('abc'))
print(hash('abc'))
print(hash('abc'))

字典的寻址  - hash算法

d = {'key':'value'}
hash - 内置函数

set集合

se = {1,2,2,3,4,5,'a','b','d','f'}
print(se)
d = {'key':'v1','key':'v2'}
print(d['key'])hash(obj) #obj内部必须实现了__hash__方法

4、eq方法(判断两字段的值是相同,一般可以用在hash算法后两个不同值hash值却相同的判断)

class A:def __init__(self,name,age):self.name = nameself.age = agedef __eq__(self, other):if self.name == other.name and self.age == other.age:return True
a = A('alex',83)
aa = A('alex',83)
aa2 = A('alex',83)
aa3 = A('alex',83)
aa4 = A('alex',83)
aa5 = A('alex',83)
aa6 = A('alex',83)
print(a,aa)
print(aa3 == aa == aa4)  # ==这个语法 是完全和__eq__

习题:

一个类
对象的属性 : 姓名 性别 年龄 部门
员工管理系统
内部转岗 python开发 - go开发
姓名 性别 年龄 新的部门
alex None 83 python
alex None 85 luffy

1000个员工
如果几个员工对象的姓名和性别相同,这是一个人
请对这1000个员工做去重

class Employee:def __init__(self,name,age,sex,partment):self.name = nameself.age = ageself.sex = sexself.partment = partmentdef __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
employ_lst = []
for i in range(200):employ_lst.append(Employee('alex',i,'male','python'))
for i in range(200):employ_lst.append(Employee('wusir',i,'male','python'))
for i in range(200):employ_lst.append(Employee('taibai', i, 'male', 'python'))# print(employ_lst)
employ_set = set(employ_lst)
for person in employ_set:print(person.__dict__)# set集合的去重机制 : 先调用hash,再调用eq,eq不是每次都触发,只有hash值相等的时候才会触发

采用的是将姓名和性别进行hash处理,在通过eq计算判断hash值相同的不同值

执行结果:

结果将2000个相同的用户信息全部去重了

python之析构方法、item系列、hash方法、eq方法相关推荐

  1. item系列内置方法重构类

    item系列 和对象使用[]访问值有联系 obj = {'k':'v'} print(obj) # 字典的对象 print(obj['k']) 在有些内置的模块中,有一些特殊的方法,要求对象必须实现_ ...

  2. python画k线图 自定周期_【量化小讲堂- Python、pandas技巧系列】极简方法将日线数据转为周线、月线或其他周期...

    引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. 想要快速.系统的学习量化知识,可以参与我与论坛合作开设的 ...

  3. python中var_【Python金融量化】VaR系列(一):HS,WHS,RM方法估计VaR

    最近参加了一个线上学习计划,一群人一起学<Elements of Financial Risk Management>这本书,主要偏向于金融时间序列和多因子模型的知识,结合python编程 ...

  4. 【Python金融量化】VaR系列(一):HS,WHS,RM方法估计VaR

    最近参加了一个线上学习计划,一群人一起学<Elements of Financial Risk Management>这本书,主要偏向于金融时间序列和多因子模型的知识,结合python编程 ...

  5. Python之析构方法

    """ 析构方法: 释放内存,做释放内存前的准备工作触发机制:析构方法会在对象被销毁时自动触发 作用:关闭一些开发的资源 注意:是对象被销毁时触发了这个方法,而不是这个方 ...

  6. Python学习,元类type 反射 函数与方法 双下方法

    1.元类type type 获取对象从属于的类 python 中 一切皆对象, 类在某种意义上也是一个对象, python中自己定义的类, 以及大部分内置类, 都是由type元类(构建类)实例化得来的 ...

  7. 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  8. Python使用pandas扩展库DataFrame对象的pivot方法对数据进行透视转换

    Python扩展库pandas的DataFrame对象的pivot()方法可以对数据进行行列互换,或者进行透视转换,在有些场合下分析数据时非常方便. DataFrame对象的pivot()方法可以接收 ...

  9. 内置python数据类型_python基础之数据类型及内置方法

    一.数字类型 1.整型int:用来记录年龄.等级.号码等 int()可以接收数字和纯数字组成的字符串参数,不能接收浮点数的字符串. 当参数为浮点数时,函数会返回参数的整数部分.当参数是整数字符串时,函 ...

最新文章

  1. debug:g2o cmake时报错“Qt5 not found. Install it and set Qt5_DIR accordingly
  2. CSS知识点——可替换元素vs不可替换元素
  3. Shell-05 sed
  4. 【WPF】提高InkAnalyer手写汉字识别的准确率
  5. WPF显示富文本emoji表情+文本(类似微信)
  6. MySQL5.7本地首次登录win10报错修改
  7. 一点一点学ASP.NET之基础概念——HttpHandler
  8. linux默认权限二进制与,Linux系统文件的默认权限和特殊权限
  9. php滚动图代码,JS上下、左右滚动代码(支持图片滚动)
  10. 1022. D进制的A+B (20)-PAT乙级真题
  11. 报错’TypeError: only integer scalar arrays can be converted to a scalar index‘
  12. 计算机无法安装小丸工具箱,小丸工具箱电脑版
  13. jwplayer +ffmpeg+red5 实现摄像头的直播
  14. 最新版Shiro-SpringBoot项目实战笔记
  15. Java黑皮书课后题第4章:4.4(几何:六边形面积)六边形面积可以通过下面公式计算(s是边长) 编写程序,提示用户输入六边形的边长,然后显示它的面积
  16. C语言无符号有符号比较问题总结
  17. 【Updating】二〇二一流水账
  18. python3基础(廖雪峰)
  19. CCS10.2入门(一)
  20. python输入十个学生的成绩、判断优良中差并计算人数_大数据基础习题(1)

热门文章

  1. 字节跳动面试题+答案,全答对的 30K 以上!
  2. 优秀简历只需一篇就能打天下
  3. 新媒体运营教程:完整的用户增长5步方案!
  4. 基于肤色高斯概率模型的人脸检测
  5. IT桔子在线教育沙龙
  6. SAP中物料单位更改处理案例
  7. 2023年上半年软考报考指南~
  8. 2种RamDisk的读写速度
  9. StopWatch使用
  10. 任务开始时间和完成时间