day 23-1 前日回顾+解构方法(__del__方法)

进阶
双下方法:
内置函数/特殊语法/语法糖/内置的模块
__len__ 内置函数len
__call__ 特殊语法 对象()
__new__ 特殊语法,构造方法,在实例化的时候__init__之前调用
__init__ 特殊语法,初始化方法,在实例化的时候__new__之后调用
__repr__ __str__
__repr__ repr %r
__str__ str %s print
如果没有str,所有原本要调用__str__方法的语法,都会调用__repr__
反过来如果没有repr,会使用父类的repr,str不能替代

在继承中: 如果子类没有str,会先找父类的str,再找子类的repr - 扩展

析构方法

                                在清除一个对象在内存中的使用的时候会触发这个对象所在的类中的析构方法
构造方法 =====》 申请一个空间
析构方法 =====》 释放一个空间之前执行
    某对象借用了操作系统的资源,还要通过析构方法归还回去 : 文件资源  网络资源

其实python是有垃圾回收机制的,当程序结束时,会自动释放我们的内存
  所以程序退出去之前会调用__del__方法 

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

在打开文件的时候,我们总是会忘记close() ,这时候就可以利用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('文件名')
f.read()
# 不管是主动还是被动,这个f对象总会被清理掉,被清理掉就触发__del__方法,触发这个方法就会归还操作系统的文件资源