python 其他类型的方法
Posted S-skill
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 其他类型的方法相关的知识,希望对你有一定的参考价值。
1. item系列
在内置的模块中,
有一些特殊的方法,要求对象必须实现__getitem__/__setitem__才能使用
2. __del__
构造方法 申请一个空间
析构方法 释放一个空间之前执行
某对象借用了操作系统的资源,还要通过析构方法归还回去: 文件资源,网络资源
不管是主动还是被动,这个object对象总是会被清理掉,被清理掉就会触发__del__方法,
触发这个方法就会归还操作系统的文件资源
是一个垃圾回收机制
python解释器在内部就能搞定的事儿.
申请一块空间,操作系统分配给你的
在这块空间之内的所有事儿,归你的python解释器来管理
3. __hash__
hash方法
底层数据结构基于hash值寻址的优化操作
hash是一个算法
能够把某一个要存在内存里的值通过一系列计算
保证不同值的hash结果是不一样的
‘2431231234355687757‘ ==>234728368923
对同一个值在多次执行python代码的时候hash值是不同的
但是对同一个值在同一次执行python代码的时候hash值是不变的
set集合 - hash算法 先判断hash,再判断值
(先判断hash(快),当两个hash的值不同,而内存地址相同时,再判断值(慢,要一个个的判断))
当一个hash的值,得出一个内存地址,而里面有存在数据时,才判断这个值和我要储存的值是都一样的,
如果一样覆盖去重,如果不一样,二次寻址给这个值换个地方
hash(obj) # obj内部必须实现了 __hash__方法
4. __eq__
"=="这个语法,是完全和__eq__ 触发的
1. item系列
class File: def __init__(self,lst): self.lst = lst def __getitem__(self, item): return self.lst[item] def __setitem__(self, key, value): self.lst[key] = value def __delitem__(self, key): self.lst.pop(key) f = File(["小王","小明","小张","小李","小黄"]) print(f.lst[0]) # __init__方法 print(f[0]) # __getitem__ f[2] = "人人" # __setitem__ 修改 print(f.lst[2]) print(f.lst) del f[4] # __delitem__ print(f.lst)
2. __del__ ==> 析构方法
class File: # 处理文件,要先创建一个file_path def __init__(self,file_path): self.f = open(file_path) # f是对象,self.f是文件句柄 def read(self): ret = self.f.read(5) # self.f是文件句柄, 读取文件里面的内容 print(ret) # 内容 def __del__(self): # 是去归还/释放一些在创建对象的时候借用的一些资源 # del 对象的时候 , 是程序员触发的 # python解释器的垃圾回收机制,回收这个对象所占内存的时候,python自动触发的 print(555) self.f.close() # 关闭文件 f = File(‘file_path‘) # 会自动触发__del__这个方法 print(f) # del f # 对象的删除 del触发析构方法 # print(f) # 会报错 f.read() # 执行函数打印内容
3. __hash__方法
# hash方法 print(hash("hash")) print(hash("hash")) print(hash("hash")) # 多行相同的代码同一次性执行的值都相同, # 多次执行的值是不相同的(也就是第一次执行的值和第二次执行的值是不相同的) # hash - 内置函数 # set集合 -- hash算法 先判断hash,再判断值 # (先判断hash(快),当两个hash的值不同,而内存地址相同时,再判断值(慢,要一个个的判断)) # 当一个hash的值,得出一个内存地址,而里面有存在数据时,才判断这个值和我要储存的值是都一样的, # 如果一样覆盖去重,如果不一样,二次寻址给这个值换个地方 # hash(obj) # obj内部必须实现了 __hash__方法 # 集合 -- hash算法 # info = {"ds",2,4,3,43,4,1} # 在集合里面有hash算法 # print(info) # 字典 - hash算法 # dic = {"key":"value"} # 字典中找值快,是用hash算法
4. __eq__方法
class file: def __init__(self,name,age): self.name = name self.age = age def __eq__(self, other): if self.name == other.name and self.age == other.age: # 判断值如果相等返回True return True else: return False a = file("小明",18) a1 = file("小明",18) print(a,a1) print(a==a1) # 对象的值相同,True print(a is a1) # 判断出内存地址不同,False # 与上面的类似 b = {‘小明‘:18} b1 = {‘小明‘:18} print(id(b),id(b1)) print(b == b1) # "==" 这里值相等,True print(b is b1) # 值相同,但是内存地址不行同
以上是关于python 其他类型的方法的主要内容,如果未能解决你的问题,请参考以下文章