一.内置方法二
1.__del__方法:
a:构造方法:创建一个空间, 析构方法;释放一个空间;
b:触发del的情况:Python解释器的垃圾回收机制,和遇到 del 对象名
c:析构方法的思想:
class A: def __del__(self): print(self) a = A() del a #这里先执行了__del__方法,再删除对象a,因为执行__del__方法时还要传入self; print(a) #输出结果: <__main__.A object at 0x0000013CF5F59128> 被执行了 Traceback (most recent call last): File "D:/Python/course/23.模块/day23/3.析构方法.py", line 49, in <module> print(a) NameError: name 'a' is not defined
d:python的垃圾回收机制:
class A: def __del__(self): print('Python解释器会在程序跑结束后执行我') a = A() print(a) #输出结果: <__main__.A object at 0x000001F823159128> Python解释器会在程序跑结束后执行我
总结:del方法:是去归还/释放一些在创建对象时借用的一些资源(有可能是操作系统的资源)
例子:像一些常用的变量在Python底层的一些对象,都有Python解释器帮你回收,
而像一些像操作系统借用的资源就需要你执行回收方法自己释放;
像文件句柄;执行close操作,还有一些网络资源;
3.计算机内部执行一些小常识:
a:申请一块空间 操作系统会分配给你的 b:在这一块空间之内的所有事,归你的Python解释器管理;
*****所以在你借用了操作系统资源时,在程序结束之前要还回去,在del方法中写关闭代码;
4.item系列:
1)getitem:对象['key']触发该方法;
class A: def __getitem__(self, item): print(item) return item #[item]触发getitem方法 a = A() print(a['a']) #输出结果: a a
2)getitem和setitem的一些结合应用:
class A: def __getitem__(self, item): return getattr(self,item) #相当于self.key def __setitem__(self, key, value): setattr(self,key,value) #相当于self.key = value a = A() a['k'] = 'v' print(a['k']) class A: def __setitem__(self, key, value): self.key = value def __getitem__(self, item): return self.key a = A() a['k'] = 'v' print(a['k']) #这两段代码的结果一样都是v,上面用到了映射
5.__hash__方法:
1)底层数据结构基于hash值寻址的优化操作
2) hash是一个算法,保证不同值的hash结果不一样的
对同一个值多次在Python解释器中执行的时候,hash值是不同的
但是对同一个值,在同一次执行Python代码的时候hash值永远不变
3)hash值不是万能的,有可能两个值的hash值相同,所以如果在一个变量进行hash算法之后发现地址有值,会进行一个判断,判断两个变量的值是否相等,若相等覆盖,若不等,则对这个变量再进行二次寻址,也遵循一个算法;
4)hash和eq(obj) # obj内部必须含有__hash__方法
class A: def __init__(self,name): self.name = name def __eq__(self, other): if self.name == other.name: return True a = A('s') b = A('s') c = A('s') print(a == b == c) #输出结果 True
::::::==触发对象中的eq方法